sizeThat在视图上有约束(框架布局视图中的自动布局视图)

时间:2016-07-18 10:07:07

标签: ios autolayout uikit

This can't be impossible to do

查看A通过在layoutSubviews中计算和设置其框架来布局其子视图。

视图B使用约束来布局它的子视图。

视图A包含许多视图B实例。

视图A在布局时需要知道其子视图的大小,因此它会在其上调用sizeThatFits:

查看B的高度取决于它的宽度。在我的示例中,它内部有一条多行UILabel

B应该如何实现它sizeThatFits:,以便在传递给size的{​​{1}}参数和帐户中的约束时返回正确的大小?

到目前为止我尝试/考虑的内容:

sizeThatFits: - 不起作用,因为它没有考虑传递给它的确切大小。它不能用于指定精确的宽度,例如,当水平收缩时垂直生长的视图。它只提供最大压缩尺寸或最大尺寸。

systemLayoutSizeFittingSize: - 据我所知,这是用于将信息 传递给 自动布局。我们想要的是从 自动布局获取信息

这就是我迄今为止的推理方式。如果我犯了错误,请纠正我。请帮助我,如果有人能指出我是如何完成的,我将非常感激!

编辑:此外,也许有一些完全不同的方法来做到这一点,甚至没有使用intrinsicContentSize?我唯一的要求是我可以在"外部"中继续使用框架布局。视图(视图A)和内部视图中的自动布局" (见B)。

edit2:添加了一张图片来说明我必须解决的确切案例

edit3:忘了提,我需要支持iOS 7.0

2 个答案:

答案 0 :(得分:0)

从图中可以看出,UIStackView可能是View A的更好方法吗?

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIStackView_Class_Reference/

然后用一个边距约束,将View A UIStackView的底部偏移到最后一个View B的底部

答案 1 :(得分:0)

我会使用Autolayout。您仍然可以指定确切的大小和位置,只需使用约束而不是框架。