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 中的自动布局问题的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell中的自动布局约束不匹配

没有自动布局的 IOS11 的 Tableview 高度调整

包含动态 TableView 高度的 UIScrollView 的自动布局

具有自动布局的tableView中标签的高度问题

当 tableview 使用自动布局滚动时避免粘性标题视图

tableview 在导航控制器中使用自动布局时有额外的标题