Ios 如何防止自动布局重置图幅?

Ios 如何防止自动布局重置图幅?,ios,objective-c,autolayout,Ios,Objective C,Autolayout,我有一个自动布局视图,它可以很好地处理不同的屏幕大小。不过,屏幕上有一个元素根据用户的操作而移动。每当我向下导航到另一个屏幕,然后返回到此视图时,该元素将重置为其原始位置 我理解为什么会发生这种情况,但我如何才能防止它?我确实希望一开始就正确设置,但第一次之后就不正确了。我找到的唯一解决方案是实现viewdilayoutsubviews 加载视图后,它将调用layoutSubviews方法 - (void)viewDidLayoutSubviews { @try {

我有一个自动布局视图,它可以很好地处理不同的屏幕大小。不过,屏幕上有一个元素根据用户的操作而移动。每当我向下导航到另一个屏幕,然后返回到此视图时,该元素将重置为其原始位置


我理解为什么会发生这种情况,但我如何才能防止它?我确实希望一开始就正确设置,但第一次之后就不正确了。

我找到的唯一解决方案是实现
viewdilayoutsubviews

加载视图后,它将调用
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会忽略它们,并在更新时重写它们

解决方案是更改约束。约束有一个名为
常量
的参数,这是在创建约束后唯一可以对其进行更改的参数。当需要四处移动NSView时,还可以添加/删除额外的约束


有一段来自WWDC 2012的视频,其中有一个非常好的示例,介绍了如何使用AutoLayout移动视图。

您当前如何移动浮动框?你是直接设置它的框架,还是修改它的约束?这不应该发生,没有理由发生。你能发布你的代码回到这个视图吗?另外,如果您正在以任何方式设置此元素的位置,请选中ViewDidDisplay或ViewWillDisplay下的复选框。@robmayoff我通过设置其边框来移动使用。也许我应该调整约束条件?@LuisOscar你确定Luis?这没有意义,但事实上,我并没有覆盖ViewDidDisplay或ViewWillDisplay。“也许我应该调整约束”是的,你应该——如果你使用约束,你的代码中不应该有任何setFrame:调用。因此,要么打开自动布局,要么调整约束。tooooooooood,这是一个委托方法,也适用于ios:):)