如何自动调整ViewController根视图的大小以适合其内容?

时间:2019-04-05 06:59:03

标签: ios uiview uiviewcontroller ios-autolayout

在创建新的UIViewController时,可以将相应的XIB文件中的根视图设置为任何固定高度。但是,根视图应自动适合其内容。该怎么办?

  • 创建一个新的XIB文件:
  • 在根视图中添加一个新的子视图,并为其指定一定的宽度和高度。
  • 在子视图中添加前导约束以定义X位置
  • 在子视图中添加顶部约束以定义Y位子
  • 在子视图中添加底部约束以定义内容高度(top + subview height + bottom
  • 直到现在一切都很好,因为top + subview height + bottom等于根视图的高度。
  • 如果顶部或底部约束设置为另一个值,则我希望根视图的大小可以调整以匹配其内容。但是,IB抱怨约束冲突。

如何解决?

当然,在大多数情况下,根视图的大小不是由其内容定义的,而是由屏幕,模态视图等定义的。在其中显示ViewController。

但是,我想将ViewController显示为另一个ViewController中ScrollView的内容。在这种情况下,ContentViewController应该与它的内容匹配,并且ScrollView可以确保可以访问完整的内容。

是否可以在IB内解决此问题而无需操纵代码中的约束?

1 个答案:

答案 0 :(得分:0)

经过反复试验后,找到了可行的解决方案:根本不使用根视图:-)

我在XIB文件的根级别添加了另一个视图,并将根视图移入了其中,使根视图成为新视图的子视图。只要VC view出口仍指向根视图(不再位于根级别),此方法就可以正常工作。

theViewController.view仍可以访问根视图。由于它不在根目录下,因此按其内容调整大小没有问题。

虽然可以正常工作,但它确实很hacky。有没有不需要虚拟包装视图的更清洁的解决方案?