Ios 屏幕视图在将新视图添加到层次结构中时调整大小并重新定位自身

Ios 屏幕视图在将新视图添加到层次结构中时调整大小并重新定位自身,ios,objective-c,xcode,uiview,storyboard,Ios,Objective C,Xcode,Uiview,Storyboard,我有这个问题,我在屏幕上移动一个“a”视图到用户想移动的任何地方(从情节提要中添加),我使用事件处理方法移动视图,这很好 现在的问题是,当我将新的“B”视图(以编程方式)添加到ViewControllers视图时,我移动到其他位置的“A”视图会自动移动到其默认位置。(位于故事板上的位置) 所以我想,我已经找到了一个原因,即每当我们向视图层次结构添加新视图时,viewWillLayoutSubViews:get的调用及其将视图重新定位为其默认值。所以我想知道我怎样才能防止这种情况 有关详细信息,请

我有这个问题,我在屏幕上移动一个“a”视图到用户想移动的任何地方(从情节提要中添加),我使用事件处理方法移动视图,这很好

现在的问题是,当我将新的“B”视图(以编程方式)添加到ViewControllers视图时,我移动到其他位置的“A”视图会自动移动到其默认位置。(位于故事板上的位置)

所以我想,我已经找到了一个原因,即每当我们向视图层次结构添加新视图时,viewWillLayoutSubViews:get的调用及其将视图重新定位为其默认值。所以我想知道我怎样才能防止这种情况

有关详细信息,请参见下图:

注意:

  • A和B(橙色和红色为UIView)

  • 橙色视图是从故事板添加的,红色视图是通过编程添加的

  • 还有我之前关于类似问题的问题


    任何帮助都将不胜感激。

    昨天我遇到了同样的问题。如果更改在具有自动布局约束的xib或情节提要中创建的视图(在示例中为A)运行时的位置,然后向同一子视图添加一些控件,则视图A将定位为原始约束

    据我所知,有两种解决方案:

  • viewA.translatesAutoResizengMaskintoConstraints=是初始化viewA后
  • 以无约束的编程方式创建viewA

  • 如果使用的是
    autoLayout
    ,则必须为场景中的所有视图添加约束
    由于您没有为
    视图A
    添加任何约束,系统将在内部添加约束以将视图放置在该特定位置。如果随后使用框架手动移动视图,这将不起作用,因为约束将强制视图移动到其原始位置

    您可以通过两种方式解决此问题:

  • 手动将约束添加到场景中的所有视图,无论是在情节提要中还是以编程方式添加。每个约束都有一个
    常量
    属性。如果需要调整视图大小或重新定位视图,请更改此
    常量的值
  • 从场景中完全禁用自动布局。然后,可以通过更改框架来重新定位视图或调整视图大小

  • 希望这有帮助!:)

    我会尽力回复你。我没有使用自动布局来查看,请参阅此链接以了解有关我面临的问题的更多详细信息。好的。我在link上看到了你真正的问题。首先,我必须说,我经历了同样的问题,我用上面的答案解决了它,但我仍然不是100%满意。如果我能看到你的代码,我可能会有所帮助,只是屏幕截图没有帮助反正我会尝试在一些单独的应用程序创建你的问题。让你知道结果。我很感激,谢谢!我只想澄清一次,1。我的AView从情节提要添加到ViewControllers视图,没有任何约束(其他视图也有约束),我已经创建了一个AView的出口,我正在移动它,正如您在我的第一个问题链接中看到的那样。问题是,当动态添加新视图时(这也是在xib上设计的,通过对UIView进行子分类),我的AView位置将更改为默认位置,即添加到情节提要上的位置。我尝试从移动视图中删除AutoLayout,但结果相同。由于容器视图使用AutoLayout,我认为所有子视图都会受到某种影响。请参阅中的类似问题/解决方案,我已经考虑过这一点(在自动布局环境中更改帧不是正确的方法,但在这种情况下,我不知道如何更改通过编程设置的约束常数),但我如何更改特定约束的常数,我知道如何改变常数的约束,如果它是设置在IB(通过使出口的约束。),你能告诉我如何才能做到这一点。提前感谢。@BharatModi在以编程方式添加约束之前,请通过将它们添加为属性来为它们创建句柄,以便以后可以访问它们。假设您有一个名为
    topConstraint
    的属性。您可以在以后更改其值,如
    topConstraint.constant=NEW\u value
    。如果您能为我提供一些代码,如我有一个leadingSpaceConstraint,它是通过编程设置的,可以在以后更新。如何操作。请使用用于添加约束的代码更新问题。之后,我将用更新后的代码更新我的答案。