在 iOS 9 上,所有 uitableviewcells 都变成一行
Posted
技术标签:
【中文标题】在 iOS 9 上,所有 uitableviewcells 都变成一行【英文标题】:All uitableviewcells become one line in height on iOS 9 【发布时间】:2015-09-11 17:25:59 【问题描述】:我有一个带有多个 UITableView 控制器的应用程序。在 ios 8.x 上运行时,每个表格中所有单元格的高度都会调整大小以适应单元格的内容(所有单元格都只包含一个带有纯文本的 UILabel)。现在在 iOS 9 上运行时,每张桌子上的每个单元格都只有一行高。这适用于动态和静态表。我已经搜索了 UIKit diffs 文档并进行了广泛的搜索,但除了所有表格中所有单元格的一行高度之外,我找不到正确的组合。
【问题讨论】:
我可以通过将其添加到 viewDidLoadself.tableView.estimatedRowHeight = 100.0; self.tableView.rowHeight = UITableViewAutomaticDimension;
来修复带有动态单元格的表格,但我仍然没有找到修复带有静态单元格的表格的方法。
由于某种原因,在情节提要中设置 numberOfLines = 0 不起作用。在 cellForRowAtIndexPath 中设置它有助于获得适当的高度。此外,调用委托的估计行高度有助于使边距更具视觉吸引力。
【参考方案1】:
我遇到过类似的情况。诀窍似乎是通过UITableView
的委托方法显式实现动态调整大小。尽管情节提要中的设置automatic
应该 可以工作 - 但事实并非如此。解决方案是通过委托方法显式提供UITableViewAutomaticDimension
,然后像往常一样提供估计的单元格大小:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
return UITableViewAutomaticDimension;
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath
/* Return an estimated height or calculate
* estimated height dynamically on information
* that makes sense in your case.
*/
return 200.0f;
如果有人确切地知道为什么这在 iOS 9 中是必需的以及它与 iOS 8 有何不同,我很想听听。
【讨论】:
【参考方案2】:我们可以使用 iOS 8 中的“UITableViewAutomaticDimension”通过以下两个属性显式地实现动态调整大小:-
tableView.estimatedRowHeight = 60.0
tableView.rowHeight = UITableViewAutomaticDimension
然后在“cellForRowAtIndexPath”方法中在返回单元格之前添加以下代码。
cell.setNeedsUpdateConstraints()
cell.updateConstraintsIfNeeded()
对于 iOS 9 我们可以添加 tableView 的委托方法:-
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat
return UITableViewAutomaticDimension
【讨论】:
【参考方案3】:在 iOS 9-10 上使用 layoutMargins
时存在 UIStackView 问题extension UIStackView
open override func didMoveToSuperview() // a workaround for stackview issues on iOS 9-10
super.didMoveToSuperview()
if #available(iOS 11.0, *) else
layoutMargins = self.layoutMargins
【讨论】:
以上是关于在 iOS 9 上,所有 uitableviewcells 都变成一行的主要内容,如果未能解决你的问题,请参考以下文章
无法在 iOs 9.1 Adobe Air 上启动应用程序(并非所有设备)
我可以在 Xcode Server 中的所有设备上运行单元测试并仅在 iOS 9.x 设备上运行 UI 测试吗?
Xcode 7:iOS 9 模拟器上没有 launchImage