美文网首页
swift 含有图片和文字的button的布局

swift 含有图片和文字的button的布局

作者: 呆呆_fdd9 | 来源:发表于2019-03-07 15:22 被阅读0次

Swift - 一句代码搞定button图片和文字布局

处理上下左右各种图片布局的button,一句代码解决。

代码地址

关注下面的标签,发现更多相似文章

Swift

extension UIButton {

    enumFZHImagePosition {

        caseleft  //image is left, label is right (图片在左,文字在右)

        caseright  //image is right, label is left (图片在右,文字在左)

        casetop    //image is top, label is bottom (图片在上,文字在下)

        case bottom //image is bottom, label is top (图片在下,文字在上)

    }

    funcsetImagePosition(position:FZHImagePosition, spacing:CGFloat) {

        self.setTitle(self.currentTitle, for: .normal)

        self.setImage(self.currentImage, for: .normal)

        // MARK - ImageSize

        varimageW:CGFloat=0

        ifletwidth =imageView?.image?.size.width{

            imageW = width

        }else{

            assertionFailure("image can't be nil(图片不能为空)")

        }

        varimageH:CGFloat=0

        ifletheight =imageView?.image?.size.height{

            imageH = height

        }

        // MARK - LabelSize

        assert(titleLabel != nil, "label be nil(文字不能为空)")

        varlabelW:CGFloat=0

        if let width = titleLabel?.frame.size.width {

            labelW = width

        }

        varlabelH:CGFloat=0

        if let height = titleLabel?.frame.size.height {

            labelH = height

        }

        letimageOffsetX = (imageW + labelW)/2- imageW/2

        letimageOffsetY = imageH/2+ spacing/2

        letlabelOffsetX = (imageW + labelW/2) - (imageW + labelW)/2

        letlabelOffsetY = labelH/2+ spacing/2

        lettempW =max(labelW, imageW)

        letchangedW = labelW + imageW - tempW

        lettempH =max(labelH, imageH)

        letchangedH = labelH + imageH + spacing - tempH

        switchposition {

        case.left:

            imageEdgeInsets=UIEdgeInsetsMake(0, -spacing/2,0, spacing/2)

            titleEdgeInsets=UIEdgeInsetsMake(0, spacing/2,0, -spacing/2)

            contentEdgeInsets=UIEdgeInsetsMake(0, spacing/2,0, spacing/2)

        case.right:

            imageEdgeInsets=UIEdgeInsetsMake(0, labelW + spacing/2,0, -(labelW + spacing/2))

            titleEdgeInsets=UIEdgeInsetsMake(0, -(imageW + spacing/2),0, imageW + spacing/2)

            contentEdgeInsets=UIEdgeInsetsMake(0, spacing/2,0, spacing/2)

        case.top:

            imageEdgeInsets=UIEdgeInsetsMake(-imageOffsetY, imageOffsetX, imageOffsetY, -imageOffsetX)

            titleEdgeInsets=UIEdgeInsetsMake(labelOffsetY, -labelOffsetX, -labelOffsetY, labelOffsetX)

            contentEdgeInsets=UIEdgeInsetsMake(imageOffsetY, -changedW/2, changedH-imageOffsetY, -changedW/2)

        case.bottom:

            imageEdgeInsets=UIEdgeInsetsMake(imageOffsetY, imageOffsetX, -imageOffsetY, -imageOffsetX)

            titleEdgeInsets=UIEdgeInsetsMake(-labelOffsetY, -labelOffsetX, labelOffsetY, labelOffsetX)

            contentEdgeInsets=UIEdgeInsetsMake(changedH-imageOffsetY, -changedW/2, imageOffsetY, -changedW/2)

        }

    }

}

相关文章

网友评论

      本文标题:swift 含有图片和文字的button的布局

      本文链接:https://www.haomeiwen.com/subject/xuwcpqtx.html