我有一个带有 AutoLayout 的视图,它适用于不同的屏幕尺寸。屏幕上有一个元素,但它会根据用户操作四处移动。每当我向下导航到另一个屏幕然后返回此视图时,此元素都会重置为其原始位置。
我明白为什么会发生这种情况,但我该如何预防呢?我确实希望它最初设置正确,但不是在第一次之后。
我有一个带有 AutoLayout 的视图,它适用于不同的屏幕尺寸。屏幕上有一个元素,但它会根据用户操作四处移动。每当我向下导航到另一个屏幕然后返回此视图时,此元素都会重置为其原始位置。
我明白为什么会发生这种情况,但我该如何预防呢?我确实希望它最初设置正确,但不是在第一次之后。
我找到的唯一解决方案是,实施viewDidLayoutSubviews
它将layoutSubviews
在视图加载后立即调用该方法..
- (void)viewDidLayoutSubviews
{
@try
{
// Adjusting controls.
}
@catch (NSException *exception)
{
NSLog(@"%s\n exception: Name- %@ Reason->%@", __PRETTY_FUNCTION__,[exception name],[exception reason]);
}
}
如果你使用 Autolayout,你永远不应该使用 setFrame/setBounds,因为正如你所见,Autolayout 会忽略它们并在更新时重写它们。
解决办法是改变约束。约束有一个名为的参数constant
,这是您在创建约束后唯一可以更改的参数。当您需要移动 NSViews 时,您还可以添加/删除额外的约束。
WWDC 2012 中有一个视频,其中有一个很好的示例,说明了如何使用 AutoLayout 移动视图。