繁体   English   中英

如何防止 AutoLayout 重置视图框架?

[英]How to prevent AutoLayout from resetting view frames?

我有一个带有 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 移动视图。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM