UIWindow正在重置我的子视图

时间:2012-12-17 11:27:35

标签: ios

我有两个视图控制器,其中一个是另一个的子视图。两个视图都通过笔尖加载。子视图控制器将其位置设置在父视图控制器的viewDidLoad中。当父视图控制器设置为UIWindow的根视图控制器时,它会将子视图控制器视图的位置重置回{0.0, 0.0}

我知道它是窗口,因为我决定观察子视图控制器视图的框架并添加一个断点(观察者是父视图控制器)。堆栈跟踪报告:

#0  0x000d34e0 in -[ParentViewController observeValueForKeyPath:ofObject:change:context:]
#1  0x32866eb0 in NSKeyValueNotifyObserver ()
#2  0x32866b0a in NSKeyValueDidChange ()
#3  0x32840eca in -[NSObject(NSKeyValueObserverNotification) didChangeValueForKey:] ()
#4  0x39b87d9e in -[UIViewController viewDidMoveToWindow:shouldAppearOrDisappear:] ()
#5  0x39b4075e in -[UIView(Internal) _didMoveFromWindow:toWindow:] ()
#6  0x39b405be in -[UIView(Internal) _didMoveFromWindow:toWindow:] ()
#7  0x39b3ae4a in -[UIView(Hierarchy) _postMovedFromSuperview:] ()
#8  0x39b227dc in -[UIView(Internal) _addSubview:positioned:relativeTo:] ()
#9  0x39b222c2 in -[UIView(Hierarchy) addSubview:] ()
#10 0x39b7fe42 in -[UIWindow addRootViewControllerViewIfPossible] ()
#11 0x39b7bae4 in -[UIWindow _setHidden:forced:] ()

如果我不打算在viewDidLoad设置位置,我打算将它设置在哪里?

更新 我认为只是位置被改变了,但是通过相同的路径,尺寸被设定。在笔尖中,它设置为横向尺寸,但框架在{0.0, 0.0}处设置为纵向尺寸。

2 个答案:

答案 0 :(得分:2)

我建议您在viewWillAppearviewDidAppear中进行此操作。调用viewDidLoad时,视图仅被加载到内存中,尚未被绘制到屏幕上,这会导致此类问题。

答案 1 :(得分:0)

尝试了一些不同的搜索关键字,我发现了一些确实非常有用的链接:

第一部分详细介绍了Numan Tariq所说的内容,最后一篇解释了我的问题。

问题是未设置自动调整大小的蒙版。在界面生成器中,有时视图具有灵活的宽度和高度并锁定到所有边距,有时它只有左边和上边距锁定。对于我使用它的方式,我需要视图才能拥有第一个。它现在可以工作并显示正确的大小,感谢Numan Tarig;),位置。