ios - 在单元格中,如何定位和调整从带有自动布局的 Nib 创建的 View 的大小?

标签 ios uitableview cocoa-touch uiview autolayout

我有一个 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/

相关文章:

javascript - 单击状态栏不会滚动到应用程序顶部 (Trigger.io)

ios - 使用 EC key 签名时 SecKeyRawSign 返回 -50

ios - Swift,无法用更多行更新 TableView

ios - 在 View Controller 之间传递对象

ios - shouldAutorotateToInterfaceOrientation 返回 YES

iphone - SBJsonParser JSONValue 失败。错误是 : Illegal start of token

ios - 在iOS7中使用CGContext绘图时出现问题

ios - TVOS UITableViewCell _UIFloatingContentView 它是什么以及用途是什么?

iphone - 如何在延迟后为 popViewController 设置动画?

objective-c - 我该如何做NSPredicate代码?