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

本文详细介绍了如何使用UIEdgeInsetsMake函数调整按钮内文本与图片的位置,包括将文本下移与调整至按钮中轴线的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    使用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。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值