动态更新约束不起作用

时间:2015-10-01 06:33:22

标签: ios iphone swift

我在动态更新顶级约束时面临一个问题。

我在其xib文件中通过 viewcontroller1 视图添加了一个subview1,并且我已将topview1作为 65 提供给topview1并为其创建了一个插座。

现在我在 viewcontroller2 上添加了 viewcontroller1 视图。添加之后,我试图将约束的常量值更新为108.但它没有得到反映。

在viewcontroller1中我正在做

for i in range(1,3):
  print(i)
  str1="onestring";
  str3="thirdstring";
  str=str1+str(i)+str3;
  print(str);

知道为什么没有反映出来吗?

4 个答案:

答案 0 :(得分:0)

您需要再次布局视图。

self.view.layoutIfNeeded()

答案 1 :(得分:0)

试试这个:

self.topErrorViewConstarints.constant = 108
self.view.setNeedsUpdateConstraints()
self.view.layoutIfNeeded()

它应该工作。如果没有,那么你在其他地方犯了错误。

答案 2 :(得分:0)

我找到问题的解决方案,所以在这里添加答案,以便它可以帮助任何人

How to add an UIViewController's view as subview

答案 3 :(得分:0)

那不是updateConstraints()应该如何运作的。

当然,您可以修改任何约束,然后像这样更新布局:

self.topErrorViewConstarints.constant = 108
self.view.layoutIfNeeded()

但是如果你想实现updateConstraints(),你需要以下内容:

// Call when you need to update your custom View
self.view.setNeedsUpdateConstraints()

然后在View内部覆盖将由系统自动调用的函数:

override func updateConstraints() {
    super.updateConstraints()

    topErrorViewConstarints.constant = currentTopErrorConstraint()
}

因此,updateConstraints()更适合内部布局的自定义视图,您不希望从外部进行修改。此外,当您需要一次更新许多约束时,它会很好。