将我的代码库从Swift 2.2迁移到Swift 3.0之后,我注意到我的UITableView
页脚没有出现。事实证明,我的UITableViewDelegate
方法都没有被调用(例如:func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView?
)。
有趣的是,正在调用UITableViewDataSource
方法并填充表。我已将父视图控制器设置为表delegate
和dataSource
。
为了说明问题,我创建了一个sample Swift 3.0 project,以便尽可能地匹配我现有的代码库。可能在Swift 3 / Xcode 8中发生了一些我不知道的事情,或者我可能会遗漏一些非常明显的东西。谢谢你的帮助!
答案 0 :(得分:5)
检查完样本项目后:
你没有做错任何事,但提到viewForFooterInSection
,在你实施heightForFooterInSection
方法之前不会被调用:
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return 50 // for example
}
类似案例:
heightForHeaderInSection
没有实施==>即使已实施viewForHeaderInSection
,也无需致电{。}}。
将numberOfRowsInSection
作为零返回==>即使已实施cellForRowAt
,也无需致电{。}}。
附加说明:您不必在tableView.dataSource = self
中添加tableView.delegate = self
和viewDidLoad()
,它们已在界面生成器中设置。< / p>
答案 1 :(得分:3)
您应该设置页脚的高度
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return 15
}
答案 2 :(得分:1)
在Xcode8或最新的Swift版本中,方法签名已更改。此更改可能导致您的代码无法调用委托方法。
使用自动完成功能再次编写方法修复它。
旧方法 -
func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat? {
return 50.0
}
新方法 -
func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 50.0
}
使用 viewForHeaderInSection 时,必须使用heightForHeaderInSection 。
希望这会有所帮助。