2016-01-21 70 views
1

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

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

我试过view.layoutIfNeeded以及但它没有帮助。我想这与viewDidLoad和其他viewController代理方法有关

P.S.我也在我的项目中使用尺寸类别,但我认为它与此无关,因为它在某些情况下工作

回答

2

更新约束可能不起作用viewWillAppear。 然而,它将在viewDidAppear工作。

还有其他地方,你可能会覆盖,如:(使用static BOOL shouldRefreshView = NO;首次)

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

感谢。它的工作(Y) –

+0

你选择了哪个选项? 'viewDidAppear'或'viewDidLayoutSubviews'? – SwiftArchitect

+0

我选了“viewDidLayoutSubviews”。我认为这样更合适。 +我没有使用shouldRefreshView变量.. @SwiftArchitect –