在屏幕上查看将新视图添加到层​​次结构中时调整大小和重新定位自身

时间:2016-03-09 05:40:26

标签: ios objective-c xcode uiview storyboard

我有这个问题,我正在移动一个' A'在屏幕上查看用户想要移动的地方(从故事板中添加),我正在使用事件处理方法移动View,并且工作正常,

我现在遇到的问题是,当我添加新的' B'查看(以编程方式)到ViewControllers视图,我的' A'查看我已移动到其他位置,自动移动到其默认位置。 (在故事板上的位置)。

所以我想,我已经找到了每次向视图层次结构添加新视图viewWillLayoutSubViews:get' s调用并将视图重新定位到其默认值的原因。所以我想知道我该如何防止这种情况?

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

enter image description here

注意:

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

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

  3. 同样see我之前关于类似问题的问题,

    任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

昨天我遇到了同样的问题。如果您更改使用Autolayout约束在xib或storyboard中创建的视图(在您的示例中为A)运行时,则将一些控件添加到同一子视图,视图A将定位到原始约束。

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

    初始化viewA后
  1. viewA.translatesAutoresizingMaskIntoConstraints = YES;
  2. 以编程方式创建viewA而不受约束。

答案 1 :(得分:0)

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

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

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