1.UILabel只要给它设置了位置约束,系统会根据显示的文字自动计算label的宽度和高度。所以给label添加位置约束就可以了。
2.约束优先级的特点:约束优先级越高,越先生效。
修改约束要有动画效果的话,需要调用当前控件的父控件的layoutIfNeeded方法(原因是:哪个控件调用layoutIfNeeded方法,并不会立马刷新它自己的约束,而是立马刷新它内部子控件的约束)
3.masonry其中一个注意点:updateConstraints会更新之前存在的约束,如果没有,会添加新的约束。remakeConstraints会删除之前所有的约束,添加新的约束。
4.当tableView要显示的时候,就会询问它的数据源,要显示什么数据。怎么询问它的数据源呢?就是调用数据源的相关代理方法。
UITableViewController里面的self.view就是self.tableView.原理是在loaView中把tableView设置成了self.view
cell显示在屏幕上的时候,就会调用该方法
原先显示过的cell, 再次显示在屏幕上的时候,也会调用该方法
5.只要cell进入用户的视线范围内,就会调用- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;方法(每当一个cell进入视野范围内就会调用一次这个方法)
如果没注册,会继续去storyboad里面找有没有这种标识的cell。如果找到了这种标识的cell,就会加载这种类型的cell,并且绑定这种标识返回
这里是怎么保证注册cell一定是在取cell之前执行的:tableView刚加载完毕,但是还没显示出来的时候,tableView是不会去询问数据源显示什么数据的,只有等tableView即将显示的时候,才会询问数据源显示什么数据
验证上面的结论
kvc的简洁之处
6.约束有个特点:约束添加好以后,到时候控件的父控件的尺寸发生变化,子控件的尺寸会跟随变化。
在注册这种写法下,xib文件中可以不用设计标识。但最好还是写上,因为其他同事用的时候,不一定是注册的方式写的。单纯在xib中设置cell的高度是没用的,cell的高度最终还是由tableView来决定,不设置cell的高度,默认就是44。cell的宽度默认填充整个tableView
这样能现实label的包裹效果。有个小细节,label显示文案的大小要跟拿来计算label尺寸的文案大小一样
这么写,会造成死循环。原因:里面那个方法在返回cell之前,它要先确定cell的宽度和高度。宽度默认是填充整个cell,高度会调用代理方法来确定cell的高度。也就是说里面那个方法的内部会调用确定cell高度的代理方法,而造成死循环
前提是cell内部的子控件上下都要有相对cell的约束
如图,最下面的label有设置label底部距离cell底部的间距
7.当初显示过,并离开屏幕的cell才会放进缓存池中。static修饰的局部变量的值,在编译阶段就要确定好。
特殊计算方法。注意点,label显示出来后,文字的最大宽度系统会自动计算,没显示出来的话,就不会自动计算,但是可以手动设置
估算高度就是用来坐性能优化的
8.当按钮仅仅显示文字的时候,这个时候如果只给按钮设置位置约束,按钮的尺寸约束会跟label一样,系统会自动包裹,也就是系统会自动计算按钮的的宽度和高度。
reloadData会把能看到的cell都刷新一遍,也就是把屏幕上的所有可视的cell都会刷新一遍
仅仅是更新的话,就用reloadData。reload的局部刷新方法,只适应于数组长度没有变化的情况
侧滑删除功能,而且是点击系统默认的删除按钮才会调用该方法
自定义侧滑删除按钮
退出编辑模式,tableView的编辑模式默认是no,当侧滑删除按钮出现的时候,该编辑模式变成yes,既tableView进入了编辑模式,要想退出侧滑删除模式,也就是退出编辑模式,把编辑模式重新设置为no就可以
9.注意点:遍历数组的时候要保证数组的长度不变,不能一边遍历一边删除,因为每删除一个元素,其他的元素的索引可能会发生变化。
tableView的编辑相关信息
上图的reloadData可以改成如图所示
headerView和footerView的宽度随便设置,都是填充整个tableView
圆角半径
comp1发布了军事新闻就会通知p1调用getNews。id类型的对象不能用点语法,但是可以用get方法
name为nil,就会监听comp1发布的所有通知
object为nil,就会监听所有的军事新闻。如果name和object都为nil,那就是只要是个通知,不管是谁发的通知,不管是什么类型的通知,都会被监听
object为nil,就是匿名通知,不知道发送者的通知
p1不在监听comp1的军事新闻
一个对象添加了通知,到时候只要有人发通知,通知中心就会去访问这个对象的内存空间
通知代理,其实就是调用代理的某个方法
网友评论