2016-11-03 132 views
0

我从xib创建了一个UIScrollView,其中3个视图在那里2个UIViews和一个UIImageView中间。当我设置约束时,Xcode要求设置Y位置约束。但问题是Y位置约束阻止滚动视图向下滚动并自动调整在横向模式下看起来很丑的视图。自动布局ios中scrollview子视图的动态高度

enter image description here

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

+0

你考虑使用的tableView? – Adeel

+0

你给UIImageview的高度限制吗? – KKRocks

+0

@Adeel我想在这里使用scrollview。 –

回答

1

您必须在内容视图中设置所有高度约束。 但是你也希望内容的高度与屏幕尺寸成正比。

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

当在两个视图之间分配约束时,忽略彼此的祖先/同胞,但在滚动视图内(至少)完全可以接受时,跳过层次结构似乎很奇怪。

你基本上是告诉了滚动,它的内容具有已知的尺寸,并在同一时间设置此内容dinamically适应屏幕尺寸(如果根的UIView的约束都设置正确)

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

这是基本思想,要通过编程完成,那么您可以探索其他解决方案。

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

+0

+1用于解释ios约束的复杂性,但它不能解决我的问题,所以不能给你正确的标记。 –

+0

其实我的viewcontroller包含滚动视图可能是这个问题 –

+0

你的视图控制器仍然有一个root UIView no? – jalone

0

UIScrollView添加约束时可能会非常棘手。您应该始终添加一个subView,其行为与UIScrollView的内容视图相同,您的所有后续视图都将进入此内容视图。

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

设置你的UIScrollView约束,你会正常,但设置你的内容视图有前置,顶部和底部的UIScrollView,但也有两个更多的约束,这将是相等的宽度和高度相等添加到viewController.view但将有一个优先级(因此,无论您的内容将增加哪个方向,该约束将中断,并通过考虑内容视图的推测高度自动增加滚动视图的内容大小)。现在继续并像往常一样为所有subview添加约束条件。我假设将是:

  1. 您最顶端的视图将有顶部和领先和尾随到其superView,也是一个固定的高度。
  2. 您的底部视图将具有领先,尾随和底部到其superView,也是一个固定的高度。
  3. 你的UIImageView将有一个领先的,尾随和顶部到顶部最多的视图和底部到底部视图。

编辑: 下面是截图以防万一(要显示的检查与内容视图的限制视图层次)

enter image description here

+0

这不会给UIView缺少约束吗? conentView和imageView将需要每个其他高度来计算它们自己的高度。 – jalone

+0

由于顶部和底部视图被附加并且具有固定的高度,所以剩余的空间将通过'UIImageView'进行调整。由于内容视图具有与整个视图相同的高度,所以它将具有内容视图所需的所有约束,并且如果需要的话打破相等的高度。如果OP希望**至少**完全显示特定的高度或图像,他将不得不对UIImageView进行高度约束,并用图像的高度以编程方式更新它。 – Rikh

+0

要改变我在前面的评论中的陈述,还要限制'> =',这将确保最低**高度**,其余的将根据手机尺寸计算出来。 – Rikh

相关问题