iOS|iOS tableview自动行高设置以及自动布局框架Masonry
【iOS|iOS tableview自动行高设置以及自动布局框架Masonry】在iOS8之后苹果推出的一个新特性Self Sizing Cells,意思就是让cell自己计算自己的高度,当我们在cell里面添加完所需控件,并约束好位置之后,我们只需要设置
tableView.estimatedRowHeight = 44.0f;
//推测高度,必须有(不写会导致cell的高度是默认,没有改动),高度最好写cell的估摸高度
tableView.rowHeight =UITableViewAutomaticDimension;
//iOS8之后默认就是这个值,可以省略
这两句代码之后,即可放心的往cell的控件里面加上内容,cell会根据内部所有控件的高度动态的计算自己的高度从而显示出来。这个就有点类似于html5中的body,会根据自己内部的内容调整自己的大小。这就给iOS开发者提供了很大的便利,不再需要之前复杂的自适应计算方法。但是要注意的是,这个需要在iOS8之后才可以使用,如果你的应用要适配iOS8之前的版本,可能无法使用该机制,当然也可以对系统版本进行判断之后再决定使用哪一套适配方案。
//设置行高
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return UITableViewAutomaticDimension;
//自动尺寸
}//预估行高
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 44;
}
推荐使用自动布局框架:
下载:Masonry(目前主流自动布局框架,功能强大)
pod导入:
pod 'Masonry', '~> 1.0.2'
如果对Masonry框架不了解的可参考:iOS自动布局框架-Masonry详解
Masonry是一个对系统NSLayoutConstraint进行封装的第三方自动布局框架,采用链式编程的方式提供给开发者API。系统AutoLayout支持的操作,Masonry都支持,相比系统API功能来说,Masonry是有过之而无不及。Masonry采取了链式编程的方式,代码理解起来非常清晰易懂,而且写完之后代码量看起来非常少。之前用NSLayoutConstraint写很多代码才能实现的布局,用Masonry最少一行代码就可以搞定。下面看到Masonry的代码就会发现,太简单易懂了。Masonry是同时支持Mac和iOS两个平台的,在这两个平台上都可以使用Masonry进行自动布局。我们可以从MASUtilities.h文件中,看到下面的定义,这就是Masonry通过宏定义的方式,区分两个平台独有的一些关键字。
Masonry中的坑在使用Masonry进行约束时,有一些是需要注意的。在使用Masonry添加约束之前,需要在addSubview之后才能使用,否则会导致崩溃。
在添加约束时初学者经常会出现一些错误,约束出现问题的原因一般就是两种:约束冲突和缺少约束。对于这两种问题,可以通过调试和log排查。
之前使用Interface Builder添加约束,如果约束有错误直接就可以看出来,并且会以红色或者黄色警告体现出来。而Masonry则不会直观的体现出来,而是以运行过程中崩溃或者打印异常log体现,所以这也是手写代码进行AutoLayout的一个缺点。
这个问题只能通过多敲代码,积攒纯代码进行AutoLayout的经验,慢慢就用起来越来越得心应手了。
推荐阅读
- 2020-04-07vue中Axios的封装和API接口的管理
- python学习之|python学习之 实现QQ自动发送消息
- iOS中的Block
- 使用composer自动加载类文件
- tableView|tableView 头视图下拉放大 重写
- 人脸识别|【人脸识别系列】| 实现自动化妆
- 记录iOS生成分享图片的一些问题,根据UIView生成固定尺寸的分享图片
- 2019-08-29|2019-08-29 iOS13适配那点事
- Hacking|Hacking with iOS: SwiftUI Edition - SnowSeeker 项目(一)
- iOS面试题--基础