在新的视图添加到层​​次结构中时,在屏幕上查看resize和重新定位本身

我有这个问题,我在屏幕上移动一个'A'视图,无论用户想要移动(这是从故事板添加),我移动视图使用事件处理方法,这是工作正常,

现在我有什么问题,当我添加新的'B'视图(编程)到ViewControllers视图,我的'A'视图,我已经移动到其他位置,自动移动到其默认位置。 (在故事板上的位置)。

所以我想,我已经find了原因,每当我们添加新视图的视图层次viewWillLayoutSubViews:get的调用,并将其视图重新定位到其默认值。 所以我想知道如何防止这个?

看到下面的图像更多的细节:

在这里输入图像说明

注意:

  1. A和B(橙色和红色都是UIView)

  2. 从故事板添加橙色视图,并以编程方式添加红色视图。

也看到我以前关于类似问题的问题,

任何帮助,将不胜感激。

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

你可以用两种方法来解决这个问题:

  1. 手动向场景中的所有视图添加约束,无论是在故事板还是以编程方式添加。 每个约束都有一个constant属性。 如果您需要resize或重新定位视图,请更改此constant的值。
  2. 从场景中完全禁用自动布局。 然后,您可以通过更改框架来重新定位或调整视图的大小。

希望这可以帮助! 🙂

昨天我遇到了同样的问题。 如果你改变在xib或storyboard中用Autolayout约束创build的视图的位置(在你的例子中为A)运行时,然后添加一些控制到相同的子视图,视图A将定位到原始的约束。

据我所知,有两个解决scheme:

  1. viewA.translatesAutoresizingMaskIntoConstraints = YES; 初始化viewA后
  2. 创build您的viewA编程方式没有约束。