我有一个 UITableViewCell
子类,我选择在其 layoutSubviews
方法中设置所有定位。我有一个我创建的特殊 View (本质上是一个带有 UILabel
的 View )作为此单元格的 subview ,我想将它正确定位在 layoutSubviews
中,但我不知道怎么做。
我手动计算每个其他 View 的位置,然后调用 setFrame。这对于我创建的这个特殊 View 来说似乎很奇怪,因为它是从 Nib 创建并使用自动布局进行布局的。但是单元格本身不使用自动布局,所以我不确定该怎么做。
在约束方面,带有标签的特殊 View 仅将标签定位在距离它所包含的每个 View 尺寸 15pt 的位置。
在 layoutSubviews
中,我想基本上保持插入它的逻辑完好无损,但要确保它在单元格中的位置和大小正确。所以基本上我想保持自动布局逻辑,使标签在特殊 View 中保持原样定位,但允许我使用 setFrame
在单元格中定位和调整整个 View 本身>。基本上是从一个带有自动布局的 Nib 创建的 View ,在一个选择不使用自动布局的单元格内使用。
我尝试基本上调用 sizeThatFits:CGSizeZero
来推断自动布局的尺寸,然后定位它,但它返回一个荒谬的大尺寸,没有意义。即使我返回手动大小,我也会在控制台中收到“约束冲突”警告,即我用于在单元格内设置标签的一个或多个自动布局约束将被忽略。
我应该怎么做?我应该如何使 View 的 subview 尊重其自动布局系统,但允许我随心所欲地定位内聚 View 本身?
最佳答案
您的特殊 View 具有所有有效约束。它可以从其自动放置的 subview 中确定其宽度和高度。
不是使用 sizeThatFits:CGSizeZero
使用 - (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize
和目标尺寸 UILayoutFittingCompressedSize
或 UILayoutFittingExpandedSize
.
然后根据返回的大小设置框架的宽度和高度,并根据您的喜好设置 origin.x/.y。
如果您的标签是多行的,请在获取合适尺寸之前设置其 preferredMaxLayoutWidth
。
编辑:测试和工作!
关于ios - 在单元格中,如何定位和调整从带有自动布局的 Nib 创建的 View 的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32804241/