如何防止AutoLayout重置视图框?

时间:2013-03-15 01:46:28

标签: ios objective-c autolayout

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

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

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

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

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

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