TableView 中的自动布局问题
Posted
技术标签:
【中文标题】TableView 中的自动布局问题【英文标题】:Auto layout issue in TableView 【发布时间】:2018-04-09 18:48:05 【问题描述】:我使用此代码为我的UITableView
使用动态高度单元格:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "QuestionsCell", for: indexPath) as! QuestionsCell
cell.label1.text = ""
cell.label2.text = ""
cell.label1.text = some text from array
cell.label2.text = some text from array
cell.label1.lineBreakMode = .byWordWrapping
cell.label1.numberOfLines = 0
cell.label1.sizeToFit()
return cell
然后,我在 Storyboard 中为每个元素(顶部、底部、前导和尾随)固定了所有约束。在 iPhone 上一切正常,但在 iPad 上,当我滚动 UITableView
时发生这种情况(动态标签高度):
【问题讨论】:
【参考方案1】:sizeToFit() 仅使 cell1 与文本所需的一样大。 您还需要对表格视图单元格使用自动高度调整大小。
在 viewDidLoad 中,
self.tableView.rowHeight = UITableViewAutomaticDimension
您还需要确保从粗体标签到“12 天前”标签之间存在垂直限制,以确保它们之间始终存在垂直空间,因此它们不会重叠。
【讨论】:
我已经添加了self.tableView.rowHeight = UITableViewAutomaticDimension
并估计了行高,是的,它们之间有一些空间(1dp)。
尝试为“days ago”标签添加顶部和底部约束,相对于它的上方标签和底部视图。
它们之间可能需要更多空间。我会尝试至少 10pt 看看会发生什么。【参考方案2】:
你需要实现这个委托方法:
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
return UITableViewAutomaticDimension
如果这不起作用,请检查顶部 textView 和底部 textView 之间是否存在垂直间距限制。
【讨论】:
我已经实现并在它们之间添加了空间,但它在滚动时就像随机一样工作以上是关于TableView 中的自动布局问题的主要内容,如果未能解决你的问题,请参考以下文章
没有自动布局的 IOS11 的 Tableview 高度调整