在单元格中,如何使用自动布局定位和调整从笔尖创建的视图的大小



我有一个UITableViewCell子类,我选择它来设置其layoutSubviews方法中的所有定位。我创建了一个特殊的视图(本质上是一个包含UILabel的视图(作为该单元格的子视图,我想将其正确定位在layoutSubviews中,但我不知道如何定位。

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

在限制方面,带有标签的特殊视图中,标签的位置仅为其所包含视图的每个大小的15磅。

layoutSubviews中,我希望基本上保持插入它的逻辑完好无损,但要确保它在单元格中的位置和大小正确。因此,本质上,我想保持自动布局逻辑,使特殊视图中的标签保持不变,但允许我使用setFrame在单元格中定位和调整整个视图本身的大小。基本上是从笔尖创建的视图,在选择不使用自动布局的单元格内使用自动布局。

我基本上试着调用sizeThatFits:CGSizeZero,用Auto Layout推断它应该是什么大小,然后定位它,但它返回了一个大得离谱的大小,这没有意义。即使我手动返回大小,我也会在控制台中收到"约束冲突"警告,即用于在单元格中设置标签的一个或多个自动布局约束将被忽略。

我该怎么做?我应该如何使视图的子视图尊重其自动布局系统,但允许我按照自己的意愿定位内聚视图本身?

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

sizeThatFits:CGSizeZero不使用,而是使用目标大小为UILayoutFittingCompressedSizeUILayoutFittingExpandedSize- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize

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

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

编辑:测试和工作!

最新更新