0

我完全迷失了 superview、loadView()、viewDidLoad()、viewWillAppear()。

最终,我想将控制器的框架设置为超级视图的边界,并在我的 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] 的代码移动到其他地方。
什么地方适合搬家?还是有更好的方法?

4

2 回答 2

0

第一次调用controller.viewself.view自动触发每个视图控制器的视图加载机制和 viewDidLoad 通知(我假设self是不同的视图控制器)。因此,每个控制器的 viewDidLoad 方法将在此代码片段的开头调用。

loadView是一种手动覆盖视图加载过程的方法。你不应该直接调用它)

于 2010-11-09T10:43:01.383 回答
0

我将总结问题和我的解决方案。

问题本质上是两个函数调用的顺序:viewDidLoad 和 addSubview 不能切换。

我想要的是,
根据superview设置孩子的框架,这只能在addSubview之后完成。
但同时,在 viewDidLoad 上,我有正确的 [self.view bounds]。

由于必须在 addSubview 之前调用 viewDidLoad,因此 viewDidLoad 将无法获得正确的 [self.view bounds] 信息。

解决方案,我声明了一个 superViewBounds 变量,并在分配视图控制器之后但在创建视图之前设置它们。并在 viewDidLoad 中使用了 bounds 变量。

还有一件事,我仍然不知道如何获得navigationViewController 的主视图(我认为它称为导航视图)边界/框架信息。

希望它有所帮助,并希望有人发布更好的解决方案,如果有的话。

于 2010-11-10T03:20:39.090 回答