gpt4 book ai didi

ios - UITableView contentSize 太大了 10pt(仅限 iOS 10!)

转载 作者:行者123 更新时间:2023-11-28 07:43:42 26 4
gpt4 key购买 nike

我有一个奇怪的问题。我有一个 UITableView 设置如下:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 200.0
}

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 210.0
}

func numberOfSections(in tableView: UITableView) -> Int {
return 1
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if drawerState == .closed {
return 0
}
return 1
}

最初 drawerState.closed 所以 contentSize210。然后我点击一个按钮来更改状态并打印新的内容大小,如下所示:

drawerState = .assessmentOpen
print("old content size is \(tableView.contentSize.height)")
tableView.insertRows(at: [IndexPath(item: 0, section: 0)], with: .none)
print("new content size is \(self.tableView.contentSize.height)")

我得到的结果是:

old content size is 210.0
new content size is 420.0

新内容大小比应有的多 10pt(新内容大小应为 410)。这个多余的高度从何而来?奇怪的是,如果我在延迟后再次打印该值,它是正确的。我已经尝试了 layoutIfNeeded 和使用 DispatchQueue.main.async 的所有组合,该值始终比应有的值高 10pt。我究竟做错了什么?注意:它只在 iOS10 上表现得像这样,iOS11 没有问题。

最佳答案

如果您有一个 .grouped 样式的 UITableView,那么每个部分的页脚都有一个不为零的默认高度。所以要解决这个问题,请添加:

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return CGFloat.leastNormalMagnitude
}

如果您只返回 0。它回落到默认值。从技术上讲,CGFloat.leastNormalMagnitude 非常类似于 0。但是如果你比较它,0 小于 CGFloat.leastNormalMagnitude

关于ios - UITableView contentSize 太大了 10pt(仅限 iOS 10!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51536877/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com