如何使一个容器视图使用其“intrinsicContentSize”,而另一个容器视图使用autolayout获取剩余的空间

时间:2016-03-10 09:17:18

标签: ios objective-c uiview autolayout

使用[[UIView alloc] init]创建容器视图;然后我使用autolayout将其他UIViews,如UIButton,UILabel,UIImageView放入其中。

我的目标是让一个容器使用其“intrinsicContentSize”,而另一个容器占用剩余的空间。但事实证明我有3个问题,

  1. 虽然每个子视图都有其intrinsicContentSize,但容器视图没有它,其intrinsicContentSize总是返回-1
  2. 如果没有intrinsicContentSize,内容拥抱和压缩阻力优先级就毫无意义。
  3. 我在容器上尝试了systemLayoutSizeFittingSize,但它总是返回0.我没弄明白为什么?
  4. 我如何实现目标

    更新:我弄清楚为什么systemLayoutSizeFittingSize总是返回0,如get container size所述,但还没有实现我的目标

1 个答案:

答案 0 :(得分:0)

子类UIView

子类UIView并在里面添加所有子视图...然后覆盖intrinsecContentSize并返回容器的大小。

override func intrinsicContentSize() -> CGSize {
    return CGSizeMake(0, self.subview1.intrinsicContentSize().width + self.subview2.intrinsicContentSize().width)
}

现在intrinsecContentSize会为您提供正确的价值。在使用intrinsecContentSize更新容器内的内容之前,请不要忘记使invalidateIntrinsicContentSize()无效。

使用UIStackView或OAStackView

如果您的应用仅支持iOS9 +,则可以使用UIStackView,否则您可以使用OAStackView