1.UITableView需要注册Cell之后才能调用
对于有xib文件的cell
let nib = UINib(nibName:name,bundle,nil)
tableView.register(nib,forCellReuseIdentifier:name)
如果需要多次在不同tableview中调用这段代码
应该写一个TableVIewController 其中有一个包含这段代码的函数
之后的TVC继承这个函数
2.要让tableview中的Cell不可被选中 应该修改cell中的selectionStyle属性 修改为.none
由图可以看出selectionStyle主要用于修改被选中时的颜色
3.
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat
return section == 0 ? 0 : xxx
用于修改每个section的前部高度 默认为0 注意section为0时其前部也会有高度 为了使第一个section位于顶部 应该返回
4.对于分割线的类型 只存在none与singleLine
对于singleLine风格 没有cell的地方也会有分割线 所以一般选择none风格 然后通过calayer画图或者弄一个特别窄的uiview画一条分割线
5.对于tableviewStyle有两种风格
.plain风格即为朴素风格 section之间没有明显分割颜色
grouped即成群的风格 分割部分的颜色较为明显
6.关于tableview 顶部留空白问题
因为在IOS11中有了safeArea的概念 为了保证view处于safeArea中 对于tableview来说 iOS的selfsizing会自动插入大概在20px的高度在tableview的顶部
print(tableView.safeAreaInsets)
print(tableView.contentInset)
print(tableView.adjustedContentInset)
可通过这三个函数查看插入的像素值
解决办法
1 .
禁止inset调节机制
if #available(iOS 11.0, *) {
tableView.contentInsetAdjustmentBehavior = .never
} else {
self.automaticallyAdjustsScrollViewInsets = false
}
禁止调节机制之后 section0 的 y将为0 即最顶端位于状态栏顶部
需要手动设置section 的头部高度 来保证视图的正确 但在IOS11中 heightForHeader函数有时不会起作用
需要禁止view估算尺寸
self.tableView.estimatedRowHeight = 0;
self.tableView.estimatedSectionHeaderHeight = 0;
self.tableView.estimatedSectionFooterHeight = 0;
最后再修改section 1 的高度
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return section == 0 ? ((self.navigationController?.navigationBar.frame.height)! + UIApplication.shared.statusBarFrame.height) : 30
}
这里因为有navigationbar 所以其头部的高度应该为 navigationbar的高度 + 状态栏的高度
2.
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
<#code#>
}
重写headview函数 自定义一个uiview来确保头部高度正确
3.
tableView.contentInset
设置偏移量
7.如何计算是否划到tableview底部
tableview位于scrollview中
所以重写方法 scrollviewdidscroll
其中scrollview参数中有三个值
frame //当前的view大小
contentsize //实际内容大小
contentoffset // 视图的位移值
如果frame.height + contentoffset.height > contentsize 时 即已滑到底部
关于默认的UITableCell
不需要register register之后的cell Style将不可修改
只有没register的可以更改Style 也不会出错