我正在从xib创建一个UIScrollView,其中3个视图有2个UIViews,中间是UIImageView。当我设置约束时,Xcode要求设置Y位置约束。但问题是Y位置约束阻止Scrollview向下滚动并自动调整在横向模式下看起来很丑的视图。
当我删除该约束时,它要求修复子视图的高度。我搜索了很多,但我是autolayout的新手,所以不了解很多解决方案。任何帮助都会很棒。
答案 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
上添加约束。我假设的是: