2010-11-09 45 views
0

我完全失去了superview,loadView(),viewDidLoad(),viewWillAppear()。最终,我想将我的控制器的框架设置为superview的边界,并在我的viewDidLoad()中使用[self.view bounds]。 (也许这是不可能的?)如何以编程方式创建视图并根据超级视图设置其框架? (iphone)

这里的代码片段,让我的悲伤..

// 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). 
} 

显然,零== controller.view.superview调用控制器的viewDidLoad。

我曾经访问[self.view界限],如果加上它的SuperView后使用我的viewDidLoad
内因为我想设置视图的框架,我想我需要移动使用[self.view范围代码]到别的地方。
转移到什么地方? 还是有更好的方法?

回答

0

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

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

+0

啊谢谢,应该是controller.view,我搞砸了。我编辑了我的问题。总之,我可以使用它的超级视图来设置视图的框架,并在viewDidLoad被调用的时候使用[self.view bounds]? – eugene 2010-11-09 11:17:11

0

我来总结一下这个问题,我的解决办法。

问题实质上是两个函数调用的顺序:viewDidLoad和addSubview无法切换。

我想要的是,
根据superview只能在addSubview之后设置子框架。
但与此同时,在viewDidLoad上,我有适当的[self.view界限]。

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

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

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

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

相关问题