Swift:视图不适应程序化约束

时间:2017-02-13 13:30:44

标签: ios swift constraints ios-autolayout

我有一个视图,我隐藏在屏幕的底部,并希望它上面的scrollView调整并填充空白空间。

屏幕底部的视图是GADBannerView,固定高度为50(bannerHeight)。它上面的滚动视图对容器底部的约束等于50(scrollConstraint)。见照片。

enter image description here

在viewDidLoad中,我将这些约束设置为以下内容:

bannerHeight.constant = 0
scrollConstraint.constant = 0

这导致bannerView确实消失了,但滚动视图保留在原始位置并且没有填充空白区域。

1 个答案:

答案 0 :(得分:0)

您可以强制超级视图考虑约束的更改,因为这不会自动发生。将代码添加到viewDidLayoutSubviews()中,或者在viewDidLoad()中将常量设置为0后调用view.layoutIfNeeded()。

如果这不起作用,您可以尝试这种替代方法:

转到故事板并单击滚动视图的底部约束(蓝色线为滚动视图提供其底部约束为50)。在Attributes Inspector中,您应该能够看到有关约束的详细信息,它应该看起来像这样

Attributes Inspector

在要求标识符的字段中,为其命名" ScrollViewBottom"或者你喜欢什么名字。

现在循环遍历组成滚动视图的所有约束,并使用标识符名称找到正确的名称,并将其更改为常量,如下所示

    for constraint in yourScrollView.superview!.constraints {

if constraint.identifier == "ScrollViewBottom" {
    constraint.constant = 0
}
}

最后,强制视图在

之后直接调用以下内容来考虑此更改
    view.layoutIfNeeded()