2015-09-27 79 views
1

我有一个UITableViewCell子类,我选择将其设置为layoutSubviews方法中的所有位置。我已经创建了一个特殊的视图(基本上是一个视图,其中包含UILabel)作为此单元的子视图,并且我想在layoutSubviews中正确定位,但我无法弄清楚。在单元格中,如何使用自动布局定位和调整从笔尖创建的视图?

每隔一个视图我计算它的位置应该手动,然后调用setFrame。这看起来很奇怪,因为它是从笔尖创建的,并使用自动布局进行布局,所创建的特殊视图。但单元本身不使用自动布局,所以我不确定要做什么。

约束的明智,在它的标签的独特视角只是在从视图中的每一个尺寸的标签定位15pt它包含英寸

layoutSubviews我想基本上保持这种逻辑镶石它的完整,但要确保它在细胞内的位置和尺寸正确。所以基本上我想保持自动布局逻辑,使特殊视图中的标签保持原样,但允许我使用setFrame将整个视图本身放置在单元格内的位置和大小。基本上,在单元格内使用自动布局的笔尖创建的视图可以选择不使用自动布局。

我试过基本上打电话sizeThatFits:CGSizeZero来推断它应该与自动布局的大小,然后定位它,但它返回一个荒谬的大尺寸,没有任何意义。即使我手动返回大小,我也会在控制台中看到“约束冲突”警告,因为在单元格中设置标签的一个或多个自动布局约束将被忽略。

我应该怎么做?我应该如何让视图的子视图尊重它的自动布局系统,但是,如果我愿意,允许我定位粘合视图本身?

回答

1

您的特殊视图具有所有有效的约束条件。它可以从其自动铺设的子视图中确定其宽度和高度。

代替使用sizeThatFits:CGSizeZero使用- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize目标尺寸为UILayoutFittingCompressedSizeUILayoutFittingExpandedSize

然后根据这个返回的尺寸设置您的框架的宽度和高度,并根据您的喜好设置origin.x/.y。

如果您的标签是多行,请在获得配件尺寸之前设置其preferredMaxLayoutWidth

编辑:测试和工作!

相关问题