如何防止AutoLayout重置视图框?

我有一个AutoLayout视图,它可以很好地适应不同的屏幕尺寸。 屏幕上有一个元素,但根据用户操作移动。 每当我向下导航到不同的屏幕然后返回到此视图时,此元素将重置为其原始位置。

我理解为什么会发生这种情况,但我该如何预防? 我确实希望它最初设置正确但不是第一次之后。

如果您正在使用Autolayout,则不应使用setFrame / setBounds,因为您已经看到Autolayout会忽略它们并在更新时重写它们。

解决方案是改变约束。 约束具有一个名为constant的参数,这是在创建约束后可以在约束上更改的唯一内容。 当您需要移动NSView时,您还可以添加/删除额外的约束。

有一个来自WWDC 2012的video,它有一个很好的例子,说明如何使用AutoLayout移动视图。

我找到的唯一解决方案是实现viewDidLayoutSubviews

它将在加载视图后立即调用layoutSubviews方法。

 - (void)viewDidLayoutSubviews { @try { // Adjusting controls. } @catch (NSException *exception) { NSLog(@"%s\n exception: Name- %@ Reason->%@", __PRETTY_FUNCTION__,[exception name],[exception reason]); } }