我有一个AutoLayout视图,它可以很好地适应不同的屏幕尺寸。屏幕上有一个元素虽然根据用户操作移动。每当我向下导航到另一个屏幕然后返回到此视图时,此元素将重置为其原始位置。
我理解为什么会发生这种情况,但我该如何预防呢?我确实希望它最初设置正确但不是第一次之后。
答案 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移动视图。