我完全迷失了superview,loadView(),viewDidLoad(),viewWillAppear()。
最终,我想将我的控制器框架设置为superview的边界,并在我的viewDidLoad()中使用[self.view bounds]。 (也许这是不可能的?)
这是给我悲伤的代码片段。
// add the controller's view to the scroll view
if (nil == controller.view.superview) {
CGRect frame = scrollView.frame;
frame.origin.x = frame.size.width * page;
frame.origin.y = 0;
controller.view.frame = frame;
[scrollView addSubview:controller.view];
// I'd like to set controller.view 's frame using superview(scrollView here).
}
显然,nil == controller.view.superview调用控制器的viewDidLoad。
我以前访问[self.view bounds]并在viewDidLoad中使用它
由于我想在将视图添加到superview之后设置视图的帧,我想我需要将利用[self.view bounds]的代码移动到其他地方。
移居的好地方是什么?
或者有更好的方法吗?
答案 0 :(得分:0)
第一次调用controller.view
和self.view
会自动触发视图加载机制和每个视图控制器的viewDidLoad通知(我假设self
是一个不同的视图控制器)。因此,将在此代码段的开头调用每个控制器的viewDidLoad方法。
(loadView
是一种手动覆盖视图加载过程的方法。你不应该直接调用它。)
答案 1 :(得分:0)
我将总结问题和解决方案。
问题实际上是两个函数调用的顺序:viewDidLoad和addSubview无法切换。
我想要的是,
根据superview设置子框架,只能在addSubview之后完成
但与此同时,在viewDidLoad上,我有适当的[self.view bounds]。
由于必须在addSubview之前调用viewDidLoad,因此viewDidLoad将无法拥有正确的[self.view bounds]信息。
解决方案, 我声明了一个superViewBounds变量并在分配视图控制器之后但在创建视图之前设置它们。并在viewDidLoad中使用了bounds变量。
还有一件事,我仍然不知道如何获得主视图(我认为它称为导航视图)navigationViewController的边界/框架信息。
希望它有所帮助,希望有人发布更好的解决方案。