layoutSubviews总结

ios layout机制相关方法

  1. - (CGSize)sizeThatFits:(CGSize)size
  2. - (void)sizeToFit

——————-

  1. - (void)layoutSubviews
  2. - (void)layoutIfNeeded
  3. - (void)setNeedsLayout

——————–

  1. - (void)setNeedsDisplay
  2. - (void)drawRect

layoutSubviews在下面情况下会被调用:

1、init初始化不会触发layoutSubviews

   可是是用initWithFrame 进行初始化时,当rect的值不为CGRectZero时,也会触发

2、addSubview会触发layoutSubviews

3、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化

4、滚动一个UIScrollView会触发layoutSubviews

5、旋转Screen会触发父UIView上的layoutSubviews事件

6、改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件

在苹果的官方文档中强调:

      You should override this method only if the autoresizing behaviors of the subviews do not offer the behavior you want.

 layoutSubviews, 当我们在某个类的内部调整子视图位置时,须要调用。

反过来的意思就是说:假设你想要在外部设置subviews的位置,就不要重写。

 刷新子对象布局

-layoutSubviews方法:这种方法,默认没有做不论什么事情,须要子类进行重写
-setNeedsLayout方法: 标记为须要又一次布局,异步调用layoutIfNeeded刷新布局,不马上刷新,但layoutSubviews一定会被调用
-layoutIfNeeded方法:假设,有须要刷新的标记,马上调用layoutSubviews进行布局(假设没有标记,不会调用layoutSubviews)

假设要立即刷新,要先调用[view setNeedsLayout],把标记设为须要布局,然后立即调用[view layoutIfNeeded],实现布局

在视图第一次显示之前,标记总是“须要刷新”的,能够直接调用[view layoutIfNeeded]

重绘

-drawRect:(CGRect)rect方法:重写此方法,运行重绘任务
-setNeedsDisplay方法:标记为须要重绘,异步调用drawRect
-setNeedsDisplayInRect:(CGRect)invalidRect方法:标记为须要局部重绘

 

sizeToFit会自己主动调用sizeThatFits方法;

sizeToFit不应该在子类中被重写,应该重写sizeThatFits

sizeThatFits传入的參数是receiver当前的size,返回一个适合的size

sizeToFit能够被手动直接调用

sizeToFit和sizeThatFits方法都没有递归,对subviews也不负责,仅仅负责自己

———————————-

layoutSubviews对subviews又一次布局

layoutSubviews方法调用先于drawRect

setNeedsLayout在receiver标上一个须要被又一次布局的标记,在系统runloop的下一个周期自己主动调用layoutSubviews

layoutIfNeeded方法如其名,UIKit会推断该receiver是否须要layout.依据Apple官方文档,layoutIfNeeded方法应该是这种

 layoutIfNeeded遍历的不是superview链,应该是subviews链

drawRect是对receiver的重绘,能获得context

setNeedDisplay在receiver标上一个须要被又一次画图的标记,在下一个draw周期自己主动重绘,iphone device的刷新频率是60hz,也就是1/60秒后重绘

转载于:https://www.cnblogs.com/mengfanrong/p/4291281.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376226.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三个彩灯循环点亮程序_近百组彩灯点亮江畔,义渡灯会正式亮灯啦

10月23日晚上,大渡口区义渡古镇华灯初上。夜幕之下,2020第一届义渡灯会亮灯仪式在此举行,来自四川的近百组彩灯将在这里点亮夜空,一直陪伴广大市民游客至明年元宵节后。当晚6点半,义渡灯会亮灯仪式正式开启。本次灯会以…

repeater序列号,换页数字不重新排

<td><%# Container.ItemIndex 1(Convert.ToInt32(this.drpCurrentPageIndex.SelectedValue)-1)*Convert.ToInt32(this.drpCount.SelectedValue)%></td>转载于:https://www.cnblogs.com/liziqiang/p/3457203.html

Altera的几个常用的Synthesis attributes(转载)

各厂商综合工具&#xff0c;对HDL综合时都定义了一些综合属性这些属性可指定a declaration,a module item,a statement, or a port connection 不同的综合方式。 语法为&#xff1a; /* synthesis, <any_company_specific_attribute value_or_optional_value */ 下面就是Al…

QPushButton hover配置

鼠标移动到QPushButton上面时显示下划线 //下面是当鼠标移动到按钮上时&#xff0c;按钮上的文字显示下划线 QPushButton#Button_2:hover{ text-decoration:underline; }//下面是普通显示 QPushButton#Button_2{ color:rgba(52, 144, 255 ,255); border-radius:0px; backgrou…

eclipse没有日志_强化公共DHT以抵抗eclipse攻击,ipfs官方还说了什么?

近日&#xff0c;IPFS官方发布博客&#xff0c;就如何强化公共DHT以抵抗eclipse攻击进行详细介绍&#xff0c;星球君帮大家翻译了一下&#xff0c;让我们来看看官方都说了什么吧&#xff1a;IPFS 2020 年的一个主要焦点是随着网络规模的不断扩大而改进内容路由。虽然我们已经对…

mongoDB简明教程-python(转)

MongoDB是一个介于关系数据库和非关系数据库之间的产品&#xff0c;是非关系数据库当中功能最丰富&#xff0c;最像关系数据库的。他支持的数据结构非常松散&#xff0c;是类似 json的bjson格式&#xff0c;因此可以存储比较复杂的数据类型。官方网站&#xff1a;http://www.mo…

HTTP基础10--web(2)

因输出值转义不完全引发的安全漏洞 实施 Web 应用的安全对策可大致分为以下两部分。 客户端的验证Web 应用端&#xff08;服务器端&#xff09;的验证: 输入值验证 / 输出值转义客户端允许篡改数据或关闭 JavaScript&#xff0c;不适合将 JavaScript 验证作为安全的防范对策。保…

单一课和综合课的划分依据_武夷岩茶产地如何划分?

产地是指某种物品的生产、出产或加工制造的地点&#xff0c;日常含义是指某种物品的主要生产地。本文探讨的武夷岩茶种植产地&#xff0c;也就是当地茶人俗称的“山场”。武夷岩茶“山场”的俗称可能缘起于宋代的茶政。宋代官府设置“榷&#xff08;qu&#xff09;茶场”&#…

windows文件路径大于MAX_PATH

如果文件路径大于MAX_PATH&#xff0c;是无法直接用CreatFile、fopen等方法来打开文件 但是可以通过在路径前面加上“\\?\”来获取文件 比如想要打开下面的文件123.txt&#xff0c;但是文件路径是很长的&#xff08;假设…是200个字符&#xff09;&#xff1a; C:\123...\1…

C# 枚举 字符串 转换

普通方法 这种方法尽管很SB但确实可以解决问题 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e){string SelPath "";switch (comboBox1.SelectedIndex){case 0: SelPath System.Environment.GetFolderPath(System.Environment.SpecialFo…

arduino 机器视觉编程_万物皆可仿真的MATLAB/Simulink神奇在哪?解析如何将其应用于一整套机器人设计开发流程...

MATLAB/Simulink&#xff1a;万物皆可仿真 MATLAB是由美国MathWorks公司出品的一款商业数学软件。它是一个多功能的科学计算平台&#xff0c;将算法开发、数据分析、矩阵计算等诸多强大功能集成在一个易于操作的视窗环境中。MATLAB下的Simulink更是被认为可以“仿真任何系统”。…

排序算法(1) 快速排序 C++实现

快速排序基本特性 时间复杂度&#xff1a;O&#xff08;n*lgn&#xff09;最坏&#xff1a;O&#xff08;n^2&#xff09;空间复杂度&#xff1a;最好情况下&#xff1a;O&#xff08;lgn&#xff09;&#xff0c;最坏情况&#xff1a;O(n)&#xff0c;平均情况&#xff1a;O(l…

boost 变量类型转换

如果vs版本比较低&#xff0c;会不支持一些std类型转换函数&#xff08;vs2008就不支持&#xff09;&#xff0c;比如&#xff1a; std::to_string \\数字转字符串 std::stoll \\字符串转数字而且项目碰巧用boost库&#xff0c;可以考虑用下面的的方法来进行类型转换…

PB增删改

新建一个数据窗口----选择需要更新的表&#xff0c;或者直接写sql也可以如下图已经建立好的数据窗口&#xff0c;根据要求将需要更新的列、unigue key 还有需要更新的表设置好&#xff0c;【将需要更新列的taborder设置大于0 这样维护的时候可以编辑&#xff08;等于0是不能编辑…

(五十六)iOS多线程之NSOperation

NSOpertation是一套OC的API&#xff0c;是对GCD进行的Cocoa抽象。 NSOperation有两种不同类型的队列&#xff0c;主队列和自定义队列。 主队列运行于主线程上&#xff0c;自定义队列在后台运行。 【NSBlockOperation】 通过Block创建任务&#xff0c;下面比较主队列和自定义队列…

android 系统源码调试 局部变量值_如何方便快速的整编Android 9.0系统源码?

点击上方“刘望舒”&#xff0c;选择“星标”多点在看&#xff0c;就是真爱&#xff01;作者 : 刘望舒 | 来源 &#xff1a;刘望舒的博客地址&#xff1a;http://liuwangshu.cn/framework/aosp/3-compiling-aosp.html前言在上一篇文章是时候下载Android 9.0系统源码了中&…

boost 文件操作

如果要简单处理文件和文件夹的时候&#xff08;删除、重命名等&#xff09;&#xff0c;使用Windows的系统函数会十分麻烦&#xff0c;可以尝试一下使用Boost库来进行处理 头文件 #include <boost/filesystem.hpp>如果要获得每次处理的结果错误码&#xff0c;需要加上头…

让“是男人就下到100层”在Android平台上跑起来

原工程:https://github.com/jeekun/DownFloors 移植后的代码&#xff1a;HelloCpp.zip 移植后的APK&#xff1a;HelloCpp.apk 说明&#xff1a;&#xff08;cocos2d-x版本是“ 2.2&#xff09; 1.该工程是直接在HelloCpp上修改完成,所以包名也不修改了 2.原工程里面可能是采用g…

Codeforces Round #277 (Div. 2) 题解

Codeforces Round #277 (Div. 2)A. Calculating Functiontime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputFor a positive integer n lets define a function f: f(n)   - 1  2 - 3  ..  ( - 1)nn Your …

QT 边框圆角处理

平时的边框是平角的&#xff1a; 如果需要圆角的话&#xff0c;就要加stylesheet加上这个&#xff1a; border-radius:3px;比如&#xff1a; QPushButton{ border-radius:3px; }就变成圆角了&#xff1a; px前面的数字越大就越圆&#xff0c;比如5px比3px圆 假如只需要某一…