我有两个视图控制器,其中一个是另一个的子视图。两个视图都通过笔尖加载。子视图控制器将其位置设置在父视图控制器的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}
处设置为纵向尺寸。
答案 0 :(得分:2)
我建议您在viewWillAppear
或viewDidAppear
中进行此操作。调用viewDidLoad
时,视图仅被加载到内存中,尚未被绘制到屏幕上,这会导致此类问题。
答案 1 :(得分:0)
尝试了一些不同的搜索关键字,我发现了一些确实非常有用的链接:
第一部分详细介绍了Numan Tariq所说的内容,最后一篇解释了我的问题。
问题是未设置自动调整大小的蒙版。在界面生成器中,有时视图具有灵活的宽度和高度并锁定到所有边距,有时它只有左边和上边距锁定。对于我使用它的方式,我需要视图才能拥有第一个。它现在可以工作并显示正确的大小,感谢Numan Tarig;),位置。