0

我有两个视图控制器,其中一个是另一个的子视图。两个视图都是通过 nibs 加载的。子视图控制器将其位置设置在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}

4

2 回答 2

2

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

于 2012-12-17T13:05:57.373 回答
0

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

第一个更详细地介绍了 Numan Tariq 所说的内容,最后一个解释了我的问题。

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

于 2012-12-17T14:25:07.340 回答