2012-01-30 96 views
4

我做所有事情编程时为ios开发,所以我手动初始化loadView中的视图控制器视图为我所有的视图控制器(这是苹果说要做的)。这样做会让我感到挫折的是,最初的viewcontrollers框架{{0,20},{320,460}}不正确地解释了我的应用中的任何navbars或tabbars。这个观点终于在viewDidAppear中设定了适当的框架,但是到那时,任何事情都为时已晚。无论如何,无需手动计算它就可以更早地识别视图布局?沮丧与视图初始化loadView

这很令人沮丧,因为我总是需要手动检查手机是否处于横向模式或纵向模式才能解释旋转,并且如果必须以特定方式设置我的子视图,而我无法使用自动调整,那么我也必须做手动计算。

苹果推荐这样做的任何模式吗?或者无论如何要让它识别视图布局而不必手动计算它?

+1

只是好奇,为什么你以编程方式做一切? – 5StringRyan 2012-01-30 23:47:29

+0

我只是喜欢,而且我为我的应用程序制作的很多视图在运行时都是动态的,所以我需要。 – 2012-01-30 23:59:45

+0

你应该使用'[[UIScreen mainScreen]边界]'获取当前视图的大小 – wattson12 2012-01-30 23:58:54

回答

4

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

否则,viewWillAppear存在于iOS 2.0中,我的测试应用程序显示它传递了正确的帧。它并没有解决旋转中期,但大概你可以在其他地方挂钩。你不打算在游戏后期设置你的观点,但除了玩layoutIfNeededviewDidLoad(我没有设法在过去工作),我不知道你应该做什么在iOS5之前。

+2

注意:这些方法只存在于iOS 5中。 – 2012-01-31 00:00:29

+0

对不起,我忘了提及,试图不使用ios 5库希望我的应用程序是向后兼容的。 – 2012-01-31 00:01:37

+0

'viewWillAppear'怎么样?这存在于iOS 2.0中,我的测试应用程序显示它已通过适当的框架。它并没有解决旋转中期,但大概你可以在其他地方挂钩。 – misnomer 2012-01-31 00:24:41

0

您可以确保您的视图具有自动调整面膜的权利,它都应该调整一次,新的大小进来。

[view setAutoresizingMask:UIViewAutoresizingFlexibleHeight]; 

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