0

我有一个带有 AutoLayout 的视图,它适用于不同的屏幕尺寸。屏幕上有一个元素,但它会根据用户操作四处移动。每当我向下导航到另一个屏幕然后返回此视图时,此元素都会重置为其原始位置。

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

4

2 回答 2

3

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

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

- (void)viewDidLayoutSubviews
{
    @try
    {
         // Adjusting controls.
    }
    @catch (NSException *exception)
    {
        NSLog(@"%s\n exception: Name- %@ Reason->%@", __PRETTY_FUNCTION__,[exception name],[exception reason]);
    }
}
于 2013-03-15T01:51:38.407 回答
1

如果你使用 Autolayout,你永远不应该使用 setFrame/setBounds,因为正如你所见,Autolayout 会忽略它们并在更新时重写它们。

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

WWDC 2012 中有一个视频,其中有一个很好的示例,说明了如何使用 AutoLayout 移动视图。

于 2013-03-16T14:41:52.057 回答