iOS笔记之UIButton的UIEdgeInsetsMake使用详解

设置各个值得含义

//UIEdgeInsetsMake(<#T##top: CGFloat##CGFloat#>, <#T##left: CGFloat##CGFloat#>, <#T##bottom: CGFloat##CGFloat#>, <#T##right: CGFloat##CGFloat#>)

testBtn.imageEdgeInsets =UIEdgeInsetsMake(0,10,40,10);

//0 表示据原来的顶部 为0  //10 表示左边框右移 10  (同理 -10 表示左边框左移 10)//40 表示下边框上移 40 //10 表示右边框左移 10 (同理 -10 表示右边框右移 10)

总之:这些参数 正值都是表示 向相反的方向移动相应的距离(例如:对top正值表示向下移动,负值表示向上移动)

这样我们就可以在UIButton的外部轻松设置想要的样式


titleEdgeInsets & imageEdgeInsets

这两个属性的效果是相辅相成的。如果给一个按钮同事设置了title和image,他们默认的状态是图片在左,标题在右,而且image和title之间没有空隙;那就这就引出一个问题,title和image的UIEdgeInsets属性分别的相对于谁而言的?

image的UIEdgeInsets属性的top,left,bottom都是相对于按钮的,right是相对于title;

title的UIEdgeInsets属性的top,bottom,right都是相对于按钮的,left是相对于image;


contentEdgeInsets

我们都知道,UIButton按钮可以只设置一个UILabel或者一个UIImageView,还可以同时具有UILabel和UIImageView;如果给按钮设置contentEdgeInsets属性,就是按钮的内容整体(包含UILabel和UIImageView)进行偏移。

按钮内容整体向右下分别移动10像素:

代码如下

/*

 typedef NS_ENUM(NSUInteger, MKButtonEdgeInsetsStyle) {

 MKButtonEdgeInsetsStyleTop, // image在上,label在下

 MKButtonEdgeInsetsStyleLeft, // image在左,label在右

 MKButtonEdgeInsetsStyleBottom, // image在下,label在上

 MKButtonEdgeInsetsStyleRight // image在右,label在左

 };

 */

//MARK: -定义button相对label的位置

enumYWButtonEdgeInsetsStyle {

    caseTop

    caseLeft

    caseRight

    caseBottom

}

extension UIButton {


    funclayoutButton(style:YWButtonEdgeInsetsStyle, imageTitleSpace:CGFloat) {

        //得到imageView和titleLabel的宽高

        letimageWidth:CGFloat=self.imageView?.frame.size.width??0

        letimageHeight:CGFloat=self.imageView?.frame.size.height??0


        let labelWidth:CGFloat = self.titleLabel?.intrinsicContentSize.width ?? 0

        let labelHeight:CGFloat = self.titleLabel?.intrinsicContentSize.height ?? 0



        //初始化imageEdgeInsets和labelEdgeInsets

        varimageEdgeInsets =UIEdgeInsets.init()

        varlabelEdgeInsets =UIEdgeInsets.init()


        //根据style和space得到imageEdgeInsets和labelEdgeInsets的值

        switchstyle {

        case.Top:

            //上 左 下 右

            imageEdgeInsets =UIEdgeInsets(top: -labelHeight-imageTitleSpace/2, left:0, bottom:0, right: -labelWidth)

            labelEdgeInsets =UIEdgeInsets(top:0, left: -imageWidth, bottom: -imageHeight-imageTitleSpace/2, right:0)

            break


        case.Left:

            imageEdgeInsets =UIEdgeInsets(top:0, left: -imageTitleSpace/2, bottom:0, right: imageTitleSpace)

            labelEdgeInsets =UIEdgeInsets(top:0, left: imageTitleSpace/2, bottom:0, right: -imageTitleSpace/2)

            break


        case.Bottom:

            imageEdgeInsets =UIEdgeInsets(top:0, left:0, bottom: -labelHeight-imageTitleSpace/2, right: -labelWidth)

            labelEdgeInsets =UIEdgeInsets(top: -imageHeight-imageTitleSpace/2, left: -imageWidth, bottom:0, right:0)

            break


        case.Right:

            imageEdgeInsets =UIEdgeInsets(top:0, left: labelWidth+imageTitleSpace/2, bottom:0, right: -labelWidth-imageTitleSpace/2)

            labelEdgeInsets =UIEdgeInsets(top:0, left: -imageWidth-imageTitleSpace/2, bottom:0, right: imageWidth+imageTitleSpace/2)

            break


        }


        self.titleEdgeInsets= labelEdgeInsets

        self.imageEdgeInsets= imageEdgeInsets


    }


}

你可能感兴趣的:(iOS笔记之UIButton的UIEdgeInsetsMake使用详解)