我一直在与故事板合作,直到我最近移动使用代码创建控制器。
我遵循我们的编码标准,在loadView()
函数中创建一些子视图,其中第一行是super.loadView()
。
从我观察到的情况下,我调用super.loadView()
之后,self.view
的帧已经正确设置为使用ViewController本身,该框架正是ViewController的框架。
我更多的经验同事说这是100%在过去的不应该给u CGRectZero
的工作,也许我不应该依靠它。
我想听听其他人的更多建议。
这是我的示例项目设置:1.创建一个简单的proj2.在第一个VC中添加一个按钮3.通过代码创建第二个VC,在第二VC中覆盖loadView()
函数,在那里致电super.loadView()
并打印self.view.bounds
NEXT LINE4. self.present
或在按钮操作中使用VC1的导航控制器以呈现或推到VC25.它总是给我第二个VC的正确框架。
请让我知道。
-------------编辑-------------------------
为了澄清我的问题,我知道诸如viewDidLayoutSubviews
或layoutSubViews
之类的生命周期功能以返回正确的视图。我是不是问这些。
我的问题是为什么loadView()
是返回我正确现在。
不幸的是,我无法就引擎盖下发生的事情提供任何见解 - 我能做的,是告诉您,根据文档,您不应该致电super.loadView()
:blockquote>
您可以覆盖此方法,以便手动创建视图。如果您选择这样做,请将视图层次结构的根视图分配给视图属性。您创建的视图应该是唯一的实例,不应与任何其他视图控制器对象共享。您的自定义实现此方法不应调用Super。
(强调我的(
1(我一直在使用故事板,直到我最近仅使用代码创建控制器。
我遵循我们的编码标准,在loadView((函数中创建一些子视图,其中第一行是super.loadview((。
- 由于您使用的是XIB,因此由于
If you use Interface Builder to create your views and initialize the view controller, you must not override this method.
的 CC_14而在Apple Docs中的LOADVIEW中使用ViewDidload。
2(我的更多经验同事说这是100%在过去不应该给你的cgrectzero的工作,也许我不应该依靠它。
我想听听其他人的更多建议。
- viewController的适当帧。至于其子视图,
viewDidLayoutSubviews
是您需要的 - LoadView和ViewDidload中的视图框架是笔尖框架大小。您的同事是正确的,它将无法返回适当的尺寸。在运行iPad应用程序中使用ViewController呈现iPad应用程序时,这是值得注意的,或在不同的屏幕尺寸上运行您的应用程序,与XIB中的设备相比 对比
另外,这个问题与您的问题直接相关:为什么我必须在ViewDidload中手动设置视图的框架?