对loadView中的视图初始化感到沮丧

时间:2012-01-30 23:37:33

标签: iphone ios cocoa-touch design-patterns uiviewcontroller

我在为ios开发时以编程方式执行所有操作,因此我在loadView中为所有视图控制器手动初始化视图控制器视图(这就是Apple所说的)。以这种方式做到这一点令我感到沮丧的是,viewcontrollers框架最初是{{0,20},{320,460}},无法正确计算我的应用程序中的任何导航栏或标签栏。视图最终在viewDidAppear中设置了正确的框架,但到那时为时已晚,无法做任何事情。反正有没有让它在没有手动计算的情况下更早地识别视图布局?

令人沮丧的是因为我总是需要手动检查手机是处于横向模式还是纵向模式以解决轮换问题,如果我必须以特定的方式设置我的子视图,我可以&#39 ; t做自动调整,然后我还要做手动计算。

Apple是否建议使用此模式,或者无论如何都要让它先前识别视图布局而不必手动计算?

2 个答案:

答案 0 :(得分:4)

如果您使用的是iOS 5,则应该在UIViewController子类的viewDidLayoutSubviewsviewWillLayoutSubviews方法中传递正确的帧。这是您应该计算布局的地方,并在设备旋转时调用它们。

否则,iOS 2.0中存在viewWillAppear,我的测试应用程序显示它已通过正确的框架。它并没有解决中期的轮换问题,但可能你可以在其他地方加入。你并不打算在游戏后期设置你的观点,除了在layoutIfNeeded(我过去没有设法工作)中使用viewDidLoad时,我不会知道iOS5之前你应该做什么。

答案 1 :(得分:0)

您可以确保您的视图具有正确的自动调整遮罩,并且一旦新尺寸进入,它就应该全部调整。

[view setAutoresizingMask:UIViewAutoresizingFlexibleHeight];

这就是我通常做的事情。否则,我会在稍后的回调中调整布局 - 通过viewWillAppear调整导航栏,不确定viewDidLoad是否过早。