美文网首页iOS学习笔记
iOS UIButton titleEdgeInsets及ima

iOS UIButton titleEdgeInsets及ima

作者: nickName0 | 来源:发表于2017-03-03 21:14 被阅读394次

    UIButton的titleEdgeInset 属性以及imageEdgeInsets属性

    项目中每次使用到UIButton这个空间的时候最纠结的就是这两个属性

    titleEdgeInset
    ```和``` imageEdgeInsets```,这次在项目中又碰到这个问题,我觉的是时候彻底解决它了(哼,说的好像这次总结你能记得住一样)。
            设计稿给出的按钮中图片和文本的布局可能是:左右结构、右左结构、上下结构、下上结构;(反正看他们的心情喽)。本文就已上下结构(图上文本下,且整体居中)为例说明一下这两个属性的关系
    初始化一个按钮实例,添加到view上,不做任何操作按钮的显示状态是这样的(本例默认```button.frame.size.width > button.imageView.frame.size.width + button.titleLab.frame.size.width```,其他情况类似)
    ![原始状态按钮](https://img.haomeiwen.com/i1984256/5044c6aa1bbec684.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    > button.imageView 和 button.titleLab 整体为什么只居中显示?
    
    初始化状态下的UIButton实例默认的事整体居中显示,这取决于UIButton的.contentHorizontalAlignment 和contentVerticalAlignment两个属性。这两个属性是枚举类型,分别有对应`UIControlContentHorizontalAlignmentTop`、`UIControlContentHorizontalAlignmentLeft`、`UIControlContentHorizontalAlignmentBottom`、`UIControlContentHorizontalAlignmentRight`和`UIControlContentVerticalAlignmentTop`、`UIControlContentVerticalAlignmentLeft`、`UIControlContentVerticalAlignmentBottom`、`UIControlContentVerticalAlignmentRight`
    不同的组合对应不同的状态,系统默认的是居中。所以改变`button.imageView`和`button.titleLab`的位置之前,先设置成我们熟悉的坐标参考系,以按钮的左上方为原点;
    即 `button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
    button.contentVerticalAlignment = UIControlContentVerticalAlignmentTop;`
    设置好之后在运行代码按钮就变成这样的了
    ![设置属性之后](https://img.haomeiwen.com/i1984256/dff52c8fdb9b8308.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    但是我们的目的是让他变成这样
    
    ![最终状态](https://img.haomeiwen.com/i1984256/024d56889e72499b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    所以还需要设置button的`UIButton的titleEdgeInset 属性以及imageEdgeInsets属性`,现在只是做简单的平移就好了,具体平移多少现在是不是容易YY点。
    具体平移多少看代码
    `//Button中imageView 宽度及高度
        CGFloat imageViewW = CGRectGetWidth(button.imageView.frame);
        CGFloat imageViewH = CGRectGetHeight(button.imageView.frame);
        
        //Button中titleLab 宽度及高度
        CGFloat titleLabW = CGRectGetWidth(button.titleLabel.frame);
        CGFloat titleLabH = CGRectGetHeight(button.titleLabel.frame);
        
        //Button的宽度及高度
        CGFloat buttonW = CGRectGetWidth(button.frame);
        CGFloat buttonH = CGRectGetHeight(button.frame);
        
        //需要设置imageEdgeInsets 的Top以及Left
        CGFloat imageViewTop = (buttonH - imageViewH - titleLabH - 10) / 2;
        CGFloat imageViewLeft = (buttonW - imageViewW) / 2;
        
        //需要设置titleEdgeInsets 的Top以及Left 加10的原因是图片和文本的间隔为10
        CGFloat titleLabTop = (imageViewTop + imageViewH) + 10;
        //lab的左边界是相对于图片的左边界而言的,所以要减去imageViewW
        CGFloat titleLabLeft = (buttonW - titleLabW) / 2 - imageViewW;
        
        button.titleEdgeInsets = UIEdgeInsetsMake(titleLabTop, titleLabLeft, 0, 0);
        button.imageEdgeInsets = UIEdgeInsetsMake(imageViewTop, imageViewLeft, 0, 0);`
    如此就达到了我的目的...
    
    

    相关文章

      网友评论

        本文标题:iOS UIButton titleEdgeInsets及ima

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