UIButton通过UIEdgeInsetsMake设置image和title的位置

来源:互联网 发布:跳跃网络次元大作战 编辑:程序博客网 时间:2024/05/20 00:13

    使用UIEdgeInsetsMake(<#CGFloat top#>, <#CGFloat left#>, <#CGFloat bottom#>, <#CGFloat right#>)函数时,需要设置4个值:

若只setTitle或setImage,其四个坐标的位置是相对于button的。

这里主要讨论同时使用setTitle、setImage的情况,此时的四个坐标是相对于image或Title的。

在不设置UIEdgeInsetsMake时,button中默认的image和titleLabel位置如下:


现在我们想把酒店两个字放在图下边,主要分为三步:

先保留image的大小:

CGSize imageSize = [UIImage imageNamed:@"imageName"].size;

1.将image和titleLabel都移至中垂线上,image右移titleLabel的宽度(buttonName.titleLabel.width),titleLabel左移image的宽度(imageSize.width)。

//四个坐标分别对应(上,左,下,右)
[categoryButton setTitleEdgeInsets:UIEdgeInsetsMake(0, -imageSize.width, 0, 0)]; 
[categoryButton setImageEdgeInsets:UIEdgeInsetsMake(0, 0, 0,-buttonName.titleLabel.width)];


此时image和title重叠在一起,它们都位于button中轴线上,现在只需下移title即可。

2.下移title,若想要title的上边缘刚好与image的下边缘接轨,则需下移imageSize.height+buttonName.titleLabel.height,将上面的代码改为:

[categoryButton setTitleEdgeInsets:UIEdgeInsetsMake(0, -imageSize.width, -titleLabelSize.height-imageSize.height, 0)];[categoryButton setImageEdgeInsets:UIEdgeInsetsMake(0, 0, 0, -titleLabelSize.width)];

3.此时image和title已经大致模样已经出来了,只需再调整至button水平方向的中轴线上,即整体上移,改写代码:

CGFloat moveTopHeight = (buttonHight - imageSize.height - titleLabelSize.height)/2;           
[categoryButton setTitleEdgeInsets:UIEdgeInsetsMake(-moveTopHeight, -imageSize.width, -titleLabelSize.height-imageSize.height, 0)];[categoryButton setImageEdgeInsets:UIEdgeInsetsMake(-moveTopHeight, 0, 0, -titleLabelSize.width)];


PS:若title的字比较多,那么titleLabel的width就不能用buttonName.titleLabel.width,应该用字体大小font.pointSize*字的个数string.length。


0 0
原创粉丝点击