以编程方式更新约束iOS

时间:2016-01-21 14:28:50

标签: ios uiviewcontroller nslayoutconstraint size-classes

我需要在项目中以编程方式更新约束,以相应地调整视图的高度(基于不同的子视图)。我已经在控制器中找到了约束的出口,但面临一个问题。

当我第一次尝试更新(在viewDidLoad或viewWillAppear 方法中)时,它没有更新。如果我之后更新它(因为一些旋转等),那么它是正确完成的。 请告诉我为什么会发生这种情况以及这样做的正确方法/地点是什么?(因为我觉得在我在viewWillAppear / DidLoad中更新后,约束会在某处再次更新)。

我也尝试了 view.layoutIfNeeded ,但没有帮助。我想这与viewDidLoad和其他viewController委托方法

有关

P.S。我也在我的项目中使用大小类,但我认为它与它无关,因为它在某些情况下有效。

1 个答案:

答案 0 :(得分:2)

更新约束可能无效viewWillAppear。 但是,它可以在viewDidAppear中使用。

您可能会覆盖其他地方,例如:(首次使用static BOOL shouldRefreshView = NO;

- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    if(shouldRefreshView) {
        shouldRefreshView = NO;
        [self.view layoutIfNeeded];
    }
}