UIButton的布局顺序细节

  什么时候调用imageRectForContentRect,titleRectForContentRect,contentRectForBounds,imageRectForContentRect,也是调用时机。首先梳理清楚几个布局的规则:

  1. 改变view的size会触发layoutSubviews
  2. 改变view的x或y不会触发layoutSubviews
  3. 改变subview的size会触发superview的layoutSubviews
  4. 改变subview的x或y不会触发自己以及父视图的layoutSubviews

记住这几个布局时的调用顺序:

  1. layoutSubviews
  2. backgroundRectForBounds:
  3. contentRectForBounds:
  4. imageRectForContentRect:
  5. titleRectForContentRect:

特别的:

  • 在UIButton初始化阶段会依次调用contentRectForBounds:,imageRectForContentRect:。这是在布局之前完成的。
  • 改变title,image,background image都会来到进行绿色文字顺序的布局。但不会触发父视图的布局,因为UIButton的尺寸未变。
  • 绿色文字区域的调用并不是一次完成。而是复杂的多次调用完成的。它的顺序是:3 -> 4 -> 3 -> 5 -> 3 -> 4

转注出:https://www.cnblogs.com/xiaobajiu/p/11774496.html

imageRectForContentRect,titleRectForContentRect,contentRectForBounds,imageRectForContentRect什么时候调用的更多相关文章

  1. iOS-UI-UI控件概述

    以下列举一些在开发中可能用得上的UI控件: IBAction和IBOutlet,UIView 1 @interface ViewController : UIViewController 2 3 @p ...

  2. iOS-UI控件概述

    IBAction和IBOutlet,UIView 1 @interface ViewController : UIViewController 2 3 @property(nonatomic, wea ...

  3. IOS之UI -- 按钮UIButton的细节

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  4. [iOS UI进阶 - 2.1] 彩票Demo v1.1

    A.需求 1.优化项目设置 2.自定义导航栏标题按钮 3.多版本处理 4.iOS6和iOS7的适配 5.设置按钮背景 6.设置值UIBarButtonItem样式   code source: htt ...

  5. UIButton, KVC, KVO

    按钮 自定义按钮:调整内部子控件的frame 方式1:实现titleRectForContentRect:和imageRectForContentRect:方法,分别返回titleLabel和imag ...

  6. iOS 网易彩票-3常见设置

    Navigation导航设置 为了统一管理导航控制器,需要自定义导航控制器MJNavigationController,继承于UINavigationController.分别设置5个Navigati ...

  7. iOS-UI控件之UIButton

    ---恢复内容开始--- UIButton 既可以显示图片,又可以显示文字,还能随时调整内部位置 系统自带尺寸 storyboard内部调整UIButton属性 状态 监听按钮点击事件 凡是继承自UI ...

  8. HUD总结

    HUD 指示器/HUD/遮盖/蒙板 半透明的指示器如何实现 指示器的alpha = 1.0; 指示器的背景色是半透明的 1. 创建颜色 直接创建对应的颜色 + (UIColor *)blackColo ...

  9. 黑马毕向东Java基础知识总结

    Java基础知识总结(超级经典) 转自:百度文库 黑马毕向东JAVA基础总结笔记    侵删! 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部 ...

随机推荐

  1. 题解 P2669 【金币】

    似乎我这个"蒟蒻"跟各位DALAO想的不太一样 首先,输入n,使用一层循环搞定 具体思路: 使用ans作为累加器,k记录发几枚金币,s负责不断赋值给累加器,sum当这些天数的金币发 ...

  2. .net压缩文件

    首先nuget安装DotNetZip 代码很少

  3. Linux目录结构-上部

    第1章 目录结构 1.1 目录结构特点 倒挂的树状结构一切从根开始一切皆文件 1.2 目录结构 /bin            二进制文件  命令 /sbin           超级命令只有root ...

  4. 申请SSL证书

    1.为什么需要申请SSL证书呢? 因为之前公司网站是通过http访问的,现在要通过https方式访问,前面多了一个s,那就需要SSL证书,用https方式访问的,会加密用户上传和下载的数据,使访问更加 ...

  5. 常用tab选项卡代码

    <div class="box"> <ul> <li class="one">课程介绍</li> <li& ...

  6. 高性能Web动画和渲染原理系列(1)——CSS动画和JS动画

    [摘要] 介绍CSS动画和JS动画的基本特点,以及轻量级动画库velocity.js的基本用法. 示例代码托管在:http://www.github.com/dashnowords/blogs 博客园 ...

  7. native-base中Input,Textarea等组件在ios平台下不能输入中文

    在上文react-native中TextInput在ios平台下不能输入中文已经解决. 但是在native-base中Input和Textarea都存在这样的问题.为了不要写多个组件,封装以下代码: ...

  8. E - Unimodal Array CodeForces - 831A

    Array of integers is unimodal, if: it is strictly increasing in the beginning; after that it is cons ...

  9. A.Two Rival Students

    题目:两个竞争的学生 链接:(两个竞争的对手)[https://codeforces.com/contest/1257/problem/A] 题意:有n个学生排成一行.其中有两个竞争的学生.第一个学生 ...

  10. C#异步编程看这篇就够了

    随着.NET Core的流行,相信你现在的代码中或多或少的会用到async以及await吧!毕竟已成标配.那么我们为什么要用async以及await呢?其实这是微软团队为我们提供的一个语法糖,让我们不 ...