[关闭]
@fiy-fish 2017-04-06T06:29:32.000000Z 字数 2588 阅读 1365

2016-04-06 1.setNeedsLayout 2.tableview autolayout 3.创建 .gitignore文件

工作日志


1. UIView的setNeedsLayout, layoutIfNeeded 和 layoutSubviews 方法之间的关系解释

layoutSubviews总结

ios layout机制相关方法

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

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

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

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

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

刷新子对象布局

如果要立即刷新,要先调用[view setNeedsLayout],把标记设为需要布局,然后马上调用[view layoutIfNeeded],实现布局

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

重绘

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秒后重绘


2.tableview autolayout

要注意的是:
cell内部需要一个或者多个有固定高度(intrinsic height)来撑起cell的高度,如果不理解可以了解下intrinsic height 的概念.
比如:intrinsic height 的例子,一个label,有上左右的约束,则他的高度会根据文字的多少来自适应。

不能改变cell自带属性的约束比如textLabel ,detailTextLabel, imageView等


3.创建 .gitignore文件

  1. 在需要创建 .gitignore 文件的文件夹, 右键选择
    Git Bash

  2. 输入 touch .gitignore 在文件夹就生成了一个“.gitignore”文件。
    然后在”.gitignore” 文件里输入你要忽略的文件夹及其文件就可以了。

  3. 输入 vim .gitignore 启动编辑器

    然后在”.gitignore” 文件里输入你要忽略的文件夹及其文件就可以了。

    保存后在文件夹就生成了一个“.gitignore”文件。

最简单的方法在项目根目录与.git目录同一位置创建一个文件: .gitignore
touch .gitignore
vi .gitignore
:wq

常用.gitignore格式 可以去网站https://www.gitignore.io 查询

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注