Autolayout父视图高度更改

时间:2016-08-03 06:20:28

标签: ios autolayout constraints

我在屏幕顶部有父视图让故事板中的TOPVIEW包含一些固定高度子视图

TOPVIEW后面的

和scrollview

看起来像

UIVIEW

  - TOPVIEW (128) FIXED
  - SCROLLVIEW 

当键盘出现时,我想将顶视图设置为0,这就是为什么我将IBOUTLET设为0并将其设置为0并将顶视图剪辑限制为YES

但是topview子视图的约束中断(视图之间的垂直空间等)

我的问题是如何解决由子视图中的父视图高度引起的约束中断,

我知道我们可以为打破限制设置优先级低,但还有其他方法吗?

提前致谢

2 个答案:

答案 0 :(得分:1)

将顶部视图和滚动视图放在垂直UIStackView中。如果要隐藏顶视图,请设置topView.hidden = true。堆栈视图将自动向上移动滚动视图的顶部,以便填充顶视图所在的空间。

答案 1 :(得分:1)

这种情况正在发生,因为您已经为TOPVIEW设置了固定高度约束,并且您正在动态更改该约束常量值,因此自动布局必须打破约束。

如果您已经为TOPView和ScrollView设置了理想约束,那么您只需要在约束中进行两次或三次更改,如下所示:

第1步:

将高度约束(128)关系从等于更改为小于或等于,如下图所示,

enter image description here

第2步:

如果您已按照链接here中的说明正确设置了scrollView约束,那么您只需进行一项更改即可更改 BottomSpace约束等于<的关系/ strong>到大于或等于位于scrollView底部的组件(在scrollView内部)。

第3步:

创建TopView高度约束的出口,并将其常量值从128切换为0,反之亦然。

就是这样,它应该按预期工作。

希望它对你有所帮助。

<强>更新

或者你也可以采取其他方式,如下所述,

第1步:

将TOPView底部TOPView内组件的bottomSpace约束优先级更改为999。

第2步:

从属性检查器中选择“剪辑子视图”属性,如下图所示

enter image description here

为了证明这一点,我做了一个小型演示应用程序,你可以看到下面的结果,

enter image description here

Orange View将TopSpace的SuperView,Leading和TrailingSpace设置为SuperView和Height约束。

Blue View有TopSpace,Leading,TrailingSpace和BottomSpace到SuperView即OrangeView,BottomSpace约束的优先级为999.它有高度约束。

这样就可以了。