在单元格中,如何定位和调整从具有自动布局的笔尖创建的视图?
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
,目标大小为UILayoutFittingCompressedSize
或UILayoutFittingExpandedSize
。
然后根据你的喜好设置你的框架的宽度和高度,以及 origin.x/.y。
如果您的标签是多行的,请在获得合适的尺寸之前设置其preferredMaxLayoutWidth
。
编辑:测试和工作!
【讨论】:
以上是关于在单元格中,如何定位和调整从具有自动布局的笔尖创建的视图?的主要内容,如果未能解决你的问题,请参考以下文章