什么时候(或不会)在我的视图控制器上为我调用updateViewConstraints?

top*_*wik 20 ios nslayoutconstraint

我有一个视图控制器,我想在updateViewConstraints中设置我的视图约束.我在该方法中有一个断点,它永远不会被调用.

为什么不能被召唤?框架什么时候想在我的视图控制器上调用此方法?

lxt*_*lxt 16

updateViewConstraints被调用viewWillLayoutSubviews(通过你的视图layoutSubviews方法).顾名思义,只要您的视图控制器需要更新其布局,就会调用此方法.

如果您发现updateViewConstraints永远不会被调用,那么你应该确保你在呼唤super您的视图控制器的方法在需要.

而且,听起来好像你在内部创建约束updateViewConstraints?这也可能是您的问题的原因.您应该更新该方法中的约束,而不是创建它们(与放置layoutSubviews视图的方式相同,但不要实例化它们).

  • 文档说"您可以在子类中覆盖此方法,以便为视图或其子视图添加约束." 因此,在updateConstraints中创建约束似乎非常酷:如果您需要彻底更改接口. (14认同)

onm*_*133 14

您在ViewController中,并且您希望系统调用updateViewConstraints,然后您必须调用它

[self.view setNeedsUpdateConstraints];
Run Code Online (Sandbox Code Playgroud)


Ben*_*air 13

UIView必须实施+ (BOOL)requiresConstraintBasedLayout并返回YES.在这种情况下,updateViewConstraints最初将调用设置约束.


Kla*_*aas 6

只是猜测而不是100%肯定:

如果视图控制器根视图不需要自动布局,则不会调用updateViewConstraints.因此,您必须至少向根视图(loadview或viewDidLoad中的某个位置)添加一个约束或设置

self.view.translatesAutoresizingMaskIntoConstraints = NO;
Run Code Online (Sandbox Code Playgroud)

这应该触发你的断点.