UITableViewHeaderFooterView

2021-05-03  本文已影响0人  今天写明天改

问题背景

最近遇到了一个需要滚动的时候显示三种cell的需求

最普通的思路是注册三种cell,然后分别在tableView(_tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 中根据条件,获取到需要重用的cell

然而,仔细观察之后,发现有两种cell样式相同,第三种cell只是起说明的作用,于是乎我想到了第二种方法,注册一种cell,根据条件不同,分别展示两种常用cell的样式,而第三种cell则作为某个section的fotter出现

方案已定,代码自然嗖嗖的开始写了,其中关于fotterView,我是这么写的

func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {

        letfotterView =UIView(frame:UIScreen.main.bounds)

        returnfotterView

}

footerView的演示

看上去好像没什么问题,然而,我的section:2 row:0是居于屏幕底部的(出于某种原因,我并没有勾选设置中safeArea layout Guide选项) 当我将列表向上滑动的时候,footerView停留在SafeAreaLayoutTop的位置,这么高级的特性,我也没见过啊,怎么才能去掉呢。没办法 看文档吧。于是 有了今天的发现

问题1

在官方文档中UITableView的Recycling Section Headers and Footers部分提供了三个方法1. - registerNib:forHeaderFooterViewReuseIdentifier:

registerClass:forHeaderFooterViewReuseIdentifier:

dequeueReusableHeaderFooterViewWithIdentifier:

瞬间发现,原来header和footer也是需要按照cell的三板斧来重用的

之前的写法会导致每次都新生成一个footer。导致不必要的性能损失

于是我将代码改成了

guard let fotterView = tableView.dequeueReusableHeaderFooterView(withIdentifier:"footer") else {

            returnUIView(frame:UIScreen.main.bounds)

 }

 returnfotterView

问题2

footerView依旧在滑动的时候停留在safeArea处,官方文档指出一共有两种样式,plain不行,那就换成Grouped试试

于是我将tableView的style 设置为Grouped,发现footer View不停留在safeArea了,事情这么顺利😄,然而,这一改动,造成了新的问题,各个section之间出现了空白的间距

于是在attribute Inspector中查找原因

attribute Inspector

我试图将Header Height    和 Footer Height设置为0来解决问题, 但是这两个属性都只能是正整数

怎么办呢, 那就让 内容超出 cell 实现内容不间断就好了

于是 cell.clipsToBounds = false

问题得到解决

问题3

我的UITableView有背景色,这导致在拉到最后的时候,会漏出背景色, 这怎么办

同样 在attribute Inspector中

attribute Inspector

在这其中根据需要进行选择就好

这样,三个问题就都解决了,总结下,有时候,不遇到点问题,还不知自己有多菜。

上一篇下一篇

猜你喜欢

热点阅读