autolayout ios中scrollview子视图的动态高度

时间:2016-11-03 10:29:27

标签: ios uiscrollview autolayout constraints subview

我正在从xib创建一个UIScrollView,其中3个视图有2个UIViews,中间是UIImageView。当我设置约束时,Xcode要求设置Y位置约束。但问题是Y位置约束阻止Scrollview向下滚动并自动调整在横向模式下看起来很丑的视图。

enter image description here

当我删除该约束时,它要求修复子视图的高度。我搜索了很多,但我是autolayout的新手,所以不了解很多解决方案。任何帮助都会很棒。

2 个答案:

答案 0 :(得分:1)

您必须在内容视图中设置所有高度限制。 但您也希望内容的高度与屏幕大小成正比。

为此,请将imageview [height | proportional | a-computation-of]的高度约束指定给包含UISCrollView的视图。

在两个视图之间分配约束时,跳过层次结构似乎很奇怪,这两个视图不是彼此的直接祖先/兄弟,但在滚动视图中(至少)它是完全可以接受的。

您基本上是在告诉滚动视图,它的内容已知大小,同时设置此内容以适应屏幕尺寸(如果根uiview的约束设置正确)

UIView1
|---UIScrollView
    |---UIView2
    |---UIImageView [heightConstr.constant=UIView1.height-UIView2.height-UIView3.height-margins]
    |---UIView3

这是基本的想法,要以编程方式完成,然后您可以探索其他解决方案。

不幸的是,ios中的约束系统非常糟糕,因为它涉及更复杂的方程,涉及单个约束的更多视图。

答案 1 :(得分:0)

添加约束时,

UIScrollView可能会非常棘手。您应始终添加subView作为UIScrollView的内容视图,并且所有后续视图都将显示在此内容视图中。

UIView1
|---UIScrollView
    |---UIContentView
        |---UIView2
        |---UIImageView

按正常方式设置UIScrollView约束,但将内容视图设置为UIScrollView的前导,尾随,顶部和底部,但还要添加两个宽度相等且宽度相等的约束到viewController.view但是优先级(因此,无论您的内容增加哪个方向,该约束都会中断,并通过参考推断自动增加滚动视图的内容大小内容视图的高度)。现在继续像往常一样在所有subview上添加约束。我假设的是:

  1. 您的最顶层视图将位于顶部,前导和尾随其superView以及固定高度。
  2. 您的底部视图将具有前导,尾随和底部superView以及固定高度。
  3. 您的UIImageView会有一个前导,尾随和顶部到顶部的视图以及底部视图的底部。
  4. 修改 以下是以下情况的屏幕截图(在检查器中显示具有内容视图约束的视图层次结构)

    enter image description here