UIButton内有两个控件titleLabel和imageView,可以用来显示一个文本和图片,这里的图片区别于背景图片。给UIButton设置了title和image后,它们会图片在左边,文本在图片右边显示。它们两个做为一个整体依赖于button的
contentHorizontalAlignment居左居右或居中显示。(默认是居中)

  1. 当button.width < image.width时,只显示被压缩后的图片,图片是按fillXY的方式压缩。

  2. 当button.width > image.width,且 button.width < (image.width + text.width)时,图片正常显示,文本被压缩。

  3. 当button.width > (image.width + text.width),两者并列默认居中显示,可通过button的属性contentHorizontalAlignment改变对齐方式。

  4. 想两改变两个子控件的显示位置,可以分别通过setTitleEdgeInsets和setImageEdgeInsets来实现。 需要注意的是,对titleLabel和imageView设置偏移,是针对它当前的位置起作用的,并不是针对它距离button边框的距离的。
    看到网上很多说 UIEdgeInsetsMake ( CGFloat top, CGFloat left, CGFloat bottom, CGFloat right ); 构造出,分别表示其中的内容/标题/图片离各边的距离。刚开始搞的很郁闷不知道为什么总是设置不对。可能是我理解错了吧,需要有空在看一下官方文档了解一下UIEdgeInsetsMake

当第三种情况的时候,button的contentHorizontalAlignment不同,我们设置UIEdgeInsetsMake的值也是不一样的

button:width=150 image:width=24 label:width=102

1.button.contentHorizontalAlignment=UIControlContentHorizontalAlignmentCenter;时 image离左边的距离为(button.width-image.width-label.width)/2 = 6, 那么我们设置
[btn setImageEdgeInsets:UIEdgeInsetsMake(0, -12, 0, 0)];其实图片只向左移了6。
当[btn setImageEdgeInsets:UIEdgeInsetsMake(0, -24, 0, 0)];或
[btn setImageEdgeInsets:UIEdgeInsetsMake(0, -12, 0, 12)];
图片才向左移了12
所以当button的对齐方式为居中时,对应方向偏移的距离要乘2;

UIEdgeInsetsMake(0, -12, 0, 0)

UIEdgeInsetsMake(0, -12, 0, 12)

2.button.contentHorizontalAlignment=UIControlContentHorizontalAlignmentLeft;时 image离左边的距离为0,label离左边的距离为image.width=24;
设置[btn setImageEdgeInsets:UIEdgeInsetsMake(0, 24, 0, 0)];
[btn setTitleEdgeInsets:UIEdgeInsetsMake(0, 24, 0, 0)];
图片和文字都正确的向右移动了24距离,而不用乘2

UIControlContentHorizontalAlignmentLeft

btn setImageEdgeInsets:UIEdgeInsetsMake(0, 24, 0, 0)

注意:位置的偏移是按最初的原始坐标来算的,比如情况2图片的原始坐标为(0,0),title的原始坐标为(24,0),偏移一次过后第二次偏移也是按照那个原始坐标来算,而不是第一次偏移后的那个坐标

我简单了写了个uibutton的分类,能简单的设置图片离左边的距离,和设置文字居中。
github:UIButtonDemo

UIButton 的edgeInsets研究相关推荐

  1. iOS插件化研究之一——JavaScriptCore

    原文:http://chentoo.com/?p=191 一.前言 一样的开篇问题,为什么要研究这个?iOS为什么要插件化?为什么要借助其他语言比如html5 js甚至脚本lua等来实现原本OC/Sw ...

  2. 你真的了解UIButton、UILabel 吗?

    一:首先查看一下关于UIButton的定义 @class UIImage, UIFont, UIColor, UIImageView, UILabel;//设置UIButton的样式 typedef ...

  3. iOS---学习研究大牛Git高星项目YYCategories(四)

    今天开始研究YYCategories的Foundation扩展类. 它包含了作者对14个Foundation框架的扩展.在详细研究每一个扩展类前我发现了一个小知识点. NS_ASSUME_NONNUL ...

  4. ios 按钮下面加下划线_iOS开发UILabel和UIButton添加下划线

    关于UILabel和UIButton有的时候需要添加下划线,一般有两种方式通过默认的NSMutableAttributedString设置,第二种就是在drawRect中画一条下划线,本文就简单的选择 ...

  5. iOS UIButton之UIEdgeInsets详解

    级别:★★☆☆☆ 标签:「UIButton内偏移量」「titleEdgeInsets」「imageEdgeInsets」 作者: MrLiuQ 审校: QiShare团队 我们先看一下苹果官方对UIE ...

  6. iOS UIButton之UIControlEvents介绍

    级别:★★☆☆☆ 标签:「UIButton」「UIControlEvents」 作者: WYW 大家好,今天小编带大家研究一下UIButton里 各种UIControlEvents的具体区别. 首先, ...

  7. ios UIButton内边距理解

    button设置内边距: UIButton结构,  ImageView+ Lable   设置内边距EdgeInsets 以后会 压缩 在宽高,和前端中设置 div内边距一样 backButton.i ...

  8. 2022-2028年中国安防行业研究及前瞻分析报告

    [报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了中国安防行业市场行业相关概述.中国安防行业市 ...

  9. 2022-2028年中国盲盒产业研究及前瞻分析报告

    [报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了中国盲盒行业市场行业相关概述.中国盲盒行业市 ...

最新文章

  1. Error Creating Control when creating a custom control
  2. 如何使用SpringBoot AOP 记录操作日志、异常日志?
  3. android 键盘搜索按钮不收起键盘,android EditText 实现搜索框点击搜索隐藏键盘
  4. python中的os操作文件,文件路径
  5. 找不到using System.Web.Script.Services 的问题
  6. HDU - 3530 Subsequence(单调队列+思维)
  7. 近似线性依靠matlab_不要仅仅依靠单元测试
  8. 软件架构(9)---UML 图
  9. idea 跳转到行数,Intellij IDEA 一些不为人知的技巧
  10. 最为完整的gdb调试
  11. ssh开发所需要的架包
  12. 5.docker 命令
  13. WPF设计の画刷(Brush)
  14. 把Alexa工具条改装成木马
  15. java 仓库管理系统源码
  16. 学习C语言的必备书籍-从入门到精通
  17. C语言 判断质数很简单
  18. 如何免费建立个人博客网站?
  19. 拜托,面试别再问我 TCC 分布式事务的原理了…
  20. 温湿度传感器不同输出方式的优异对比

热门文章

  1. ggplot2笔记9:绘图需要的数据整理技术
  2. 我们从那里来—NG子宫日记 Womb
  3. pandas使用extract函数根据正则表达式从dataframe指定数据列的字符串中抽取出数字(设置expand=false之后返回的为series)、将series转化为dataframe
  4. R语言使用ggplot2包使用geom_violin函数绘制分组小提琴图(配置边界颜色)实战
  5. R语言ggplot2可视化时间序列数据并添加稳定趋势线识别数据的稳定趋势
  6. Python使用pandas设置数据列中float数据类型的有效小数位数、抑制科学计数法
  7. 混淆矩阵是什么?Python多分类的混淆矩阵计算及可视化(包含原始混淆矩阵及归一化的混淆矩阵):基于skelarn框架iris数据集
  8. R语言replace函数数值替换实战
  9. R语言dplyr包排序及序号函数实战(row_number、ntile、min_rank、dense_rank、percent_rank、cume_dist)
  10. R语言abs函数计算数值数据对象的绝对值实战