博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS UIButton之UIEdgeInsets详解
阅读量:6577 次
发布时间:2019-06-24

本文共 2758 字,大约阅读时间需要 9 分钟。

级别:★★☆☆☆

标签:「UIButton内偏移量」「titleEdgeInsets」「imageEdgeInsets」
作者: 

我们先看一下苹果官方对UIEdgeInsets说明:

typedef struct UIEdgeInsets {    CGFloat top, left, bottom, right;  // specify amount to inset (positive) for each of the edges. values can be negative to 'outset'} UIEdgeInsets;复制代码
  • 官方:specify amount to inset (positive) for each of the edges. values can be negative to 'outset' .
  • 解释:对每条边向内方向的偏移量,可以为正值(向内偏移)也可以为负值(向外偏移)。

基本使用:

xxx.edgeInsets = UIEdgeInsetsMake(.0, .0, .0, .0);//例如我们设置UICollectionView的edgeInset会使collectionView产生内偏移UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];layout.sectionInset = UIEdgeInsetsMake(20.0, .0, .0, .0);复制代码

引入正题: 然而,UIButton的内偏移量与其他控件有些区别, 因为UIButton内部默认有两个子控件:UILabel和UIImageView 所以UIButton在内偏移量的计算上会有差异。 为什么?先卖个关子,下文解释。

UIButtonEdgeInsets:

需求:通过修改edgeInsets,改变Button内部的ImageView和titleLabel的相对位置。

思路:通过修改button的两个属性:titleEdgeInsets和imageEdgeInsets,从而达到最终的具体需求。

这里列出了三个比较常见的需求:

  • image左 title右
  • image右 title左
  • image上 title下

小编做了一个demo,效果如下图:

场景一:左图右字

button.titleEdgeInsets = UIEdgeInsetsMake(0, 10.0, 0, 0);复制代码

语法解释:设置了title的左边线的内偏移量为10.0,

但经测试,

注意:实际上title和Image只有5.0的距离
注意:实际上title和Image只有5.0的距离
注意:实际上title和Image只有5.0的距离

图解如下:

在这种场景下:

  • title的 上边线、右边线、下边线 内偏移 是相对于contentView的
  • image的 上边线、左边线、下边线 内偏移 是相对于contentView的
  • title的 左边线 内偏移 相对于image
  • image的 右边线 内偏移 相对于title

场景二:左字右图

button.titleEdgeInsets = UIEdgeInsetsMake(.0, - button.imageView.bounds.size.width - 10.0, .0, button.imageView.bounds.size.width);button.imageEdgeInsets = UIEdgeInsetsMake(.0, button.titleLabel.bounds.size.width, .0, - button.titleLabel.bounds.size.width);复制代码

语法解释:

  • title的 左边线 内偏移 - (imageView.width +10)<=> 等价于 title的左边线 向 内偏移的反方向 移动 (image.width +10)
  • title的 右边线 内偏移 imageView.width <=>   等价于 title的右边线 向 内偏移的正方向 移动 imageView.width
  • image的 左边线 内偏移 titleLabel.width <=> 等价于 image的左边线 向 内偏移的正方向 移动 titleLabel.width
  • image的 右边线 内偏移 - titleLabel.width <=> 等价于 title的左边线 向 内偏移的反方向 移动 titleLabel.width

是不是有点绕人?哈哈,不要慌,请看图解

场景三:上图下字

button.titleEdgeInsets = UIEdgeInsetsMake(button.imageView.frame.size.height + 10.0, - button.imageView.bounds.size.width, .0, .0);button.imageEdgeInsets = UIEdgeInsetsMake(.0, button.titleLabel.bounds.size.width / 2, button.titleLabel.frame.size.height + 10.0, - button.titleLabel.bounds.size.width / 2);复制代码

语法解释:

  • title的 上边线 内偏移 (imageView.height +10)<=> 等价于 title的上边线 向 内偏移的正方向 移动 (image.height +10)
  • title的 左边线 内偏移 - imageView.width <=> 等价于 title的左边线 向 内偏移的反方向 移动 image.width
  • image的 左边线 内偏移 titleLabel.width * 0.5 <=> 等价于 image的左边线 向 内偏移的正方向 移动 titleLabel.width 的一半
  • image的 下边线 内偏移 titleLabel.height + 10 <=> 等价于 image的下边线 向 内偏移的正方向 移动 titleLabel.height + 10
  • image的 右边线 内偏移 - titleLabel.width * 0.5 <=> 等价于 image的右边线 向 内偏移的反方向 移动 titleLabel.width 的一半

请看图解:

最后,本文Demo链接:

关注我们的途径有:

QiShare(微信公众号)

推荐文章:

转载地址:http://vsfno.baihongyu.com/

你可能感兴趣的文章
Github Page 绑定域名
查看>>
排序(杭电1106)
查看>>
【微服务干货系列】使用微服务架构之前,你必须知道的
查看>>
SDUST 2844-Mineral Water(数学)
查看>>
我的第一个开源控件-DragGridView
查看>>
5 Protocols For Event-Driven API Architectures
查看>>
Git篇
查看>>
Navicat for MySQL 使用SSH方式链接远程数据库(二)
查看>>
Linux常用基本命令( mkdir )
查看>>
JS原型 原型链
查看>>
maven打包时跳过测试
查看>>
Wix 安装部署教程(十) --来,用WPF做个漂亮的安装界面
查看>>
WPF 窗口居中 & 变更触发机制
查看>>
php标准库spl栈SplStack如何使用?
查看>>
机器学习新手使用入门
查看>>
详解Spring Boot集成MyBatis的开发流程
查看>>
C# Winform制作虚拟键盘,支持中文
查看>>
Data Visualization – Banking Case Study Example (Part 1-6)
查看>>
Linux下用信号量实现对共享内存的访问保护
查看>>
九度OJ 1177 查找 (模拟)
查看>>