2017-02-13 61 views
0

我有一种观点,我隐藏在屏幕的底部,并希望它上面的scrollView调整并填充空白空间。Swift:视图不能调整到编程约束

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

enter image description here

在viewDidLoad中被我设置这些限制以下几点:

bannerHeight.constant = 0 
scrollConstraint.constant = 0 

这是造成bannerView没有消失,但滚动视图被留在它的原始位置,而不是填充空隙空间。

+0

变化我有两个建议:尽量把你的代码在viewWillAppear中,并确保translatesAutoresizingMaskIntoConstraints = false为两个横幅和滚动视图。有时候,约束不能在viewDidLoad中完全计算。 – Ocunidee

+0

您需要使用'bannerHeight.constant'作为'scrollConstraint.constant'的值。 –

回答

1

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

如果这不起作用,你可以试试这个替代方法:

转到您的故事板,然后点击滚动视图的底部约束(蓝线,让滚动查看其50底部的约束)。在属性检查器,你应该能够看到你的约束的细节,应该是这个样子

Attributes Inspector

在询问的标识符字段,给它的任何名称,你的名字“ScrollViewBottom”或喜欢。

现在遍历所有构成滚动视图,并使用标识符名称来找到正确的一个,并改变它的恒定,最后如下

for constraint in yourScrollView.superview!.constraints { 

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

,迫使以考虑到这个约束通过调用下面直后

view.layoutIfNeeded()