在单元格中,如何定位和调整从具有自动布局的笔尖创建的视图?

Posted

技术标签:

【中文标题】在单元格中,如何定位和调整从具有自动布局的笔尖创建的视图?【英文标题】:In a cell, how do I position and size a view created from a nib with Auto Layout? 【发布时间】:2015-09-27 03:20:23 【问题描述】:

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

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

在约束方面,带有标签的特殊视图仅将标签定位在距离它所包含的每个视图大小 15pt 的位置。

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

我尝试基本上调用sizeThatFits:CGSizeZero 来推断它应该使用自动布局的大小,然后定位它,但它返回一个没有意义的荒谬大的大小。即使我返回手动大小,我也会在控制台中收到“约束冲突”警告,即我用于在单元格内设置标签的一个或多个自动布局约束将被忽略。

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

【问题讨论】:

【参考方案1】:

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

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

然后根据你的喜好设置你的框架的宽度和高度,以及 origin.x/.y。

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

编辑:测试和工作!

【讨论】:

以上是关于在单元格中,如何定位和调整从具有自动布局的笔尖创建的视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用自动布局来调整表格视图单元格中的视图大小?

如何使用自动布局来调整表格视图单元格中的视图?

UITableViewHeaderFooterView 不支持笔尖中的自动布局约束

使用自动布局进行编辑时在表格视图中调整子视图的大小

具有固定高度的表格单元格中的自动布局多行标签

如何从 tableview 的单元格中删除 imageView,并重置单元格的高度