gpt4 book ai didi

ios - 不正确的 UITableViewCell 高度与动态 UILabels 和内容压缩/电阻

转载 作者:行者123 更新时间:2023-11-28 06:47:54 26 4
gpt4 key购买 nike

基于 Xcode 7.2.1、iOS 9.2 构建

我有一个 UITableView,其中的单元格具有自动高度。

tableView.estimatedRowHeight = 80
tableView.rowHeight = UITableViewAutomaticDimension

单元格的布局如下:

UITableViewCell
contentView
outerStackView - pinned to top, left, right, bottom edges of the contentView with autolayout
leftColumnStackView - 38% of width of outerStackView
topStackView
label UILabel
value UILabel
bottomStackView
label UILabel
value UILabel
middleColumnStackView - 38% of width of outerStackView
...
rightColumnStackView - rest of the width of outerStackView
...

单元格中有 6 个标签/值对——[标签 X:值]。每个标签/值对由 2 个 UILabels 组成,它们的内容拥抱和内容压缩阻力属性相应设置以提供所需的外观。

label.numberOfLines = 0
label.textAlignment = NSTextAlignment.Left
label.setContentCompressionResistancePriority(1000, forAxis: .Horizontal)
label.setContentHuggingPriority(1000, forAxis: .Horizontal)

value.numberOfLines = 0
value.setContentCompressionResistancePriority(500, forAxis: .Horizontal)
value.setContentHuggingPriority(500, forAxis: .Horizontal)

// there are 6 stack views, each containing a label/value pair
// the stack views are .Horizontal alignment, and pinned to the
// columns they sit in
stackView.addArrangedSubview(label)
stackView.addArrangedSubview(value)

然而,有时单元格高度会适本地自行测量,有时会增加一堆额外的空间(有趣的是,额外的空间总是等于内容压缩时应该的空间/hugging 没有添加到任何一个标签中)。

这是发生的不一致:

有时候是对的: enter image description here

有时是错误的: enter image description here

然而,当我从标签中删除内容压缩/阻力时,单元格始终是正确的高度,但看起来像这样: enter image description here

有人遇到过类似情况吗?有什么建议吗?

最佳答案

想通了!

这最终与如何使用 AutoLayout 定位单元格的 contentView 有关。显然,默认情况下它没有正确布局和计算其 subview 的位置。

在我的 UITableViewCell 子类中,我将以下内容添加到我的 init()

contentView.translatesAutoresizingMaskIntoConstraints = false
contentView.leadingAnchor.constraintEqualToAnchor(leadingAnchor).active = true
contentView.trailingAnchor.constraintEqualToAnchor(trailingAnchor).active = true
contentView.topAnchor.constraintEqualToAnchor(topAnchor).active = true
contentView.bottomAnchor.constraintEqualToAnchor(bottomAnchor).active = true

通过将 contentView 固定到单元格,UITableViewCell 的高度分配不一致的问题消失了,并且始终显示正确的高度。

这导致 contentView 被拉伸(stretch)到所有 4 个边缘,这确实影响了一些其他事情(比如当 UITableView 编辑翻转到 true),但现在我可以通过其他方式解决这些问题,因为没有任何事情被计算为错误或发生意外。

关于ios - 不正确的 UITableViewCell 高度与动态 UILabels 和内容压缩/电阻,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35783858/

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