如何根据superview以编程方式创建视图并设置其框架? (苹果手机)

时间:2010-11-09 10:24:31

标签: iphone viewdidload superview

我完全迷失了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]的代码移动到其他地方。
移居的好地方是什么? 或者有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

第一次调用controller.viewself.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的边界/框架信息。

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