iOS - self.view.frame.size.width是0.00000

时间:2012-09-24 04:37:48

标签: ios ipad ios6

我有一个视图控制器(SecondViewController),其中一个名为setupHomeScreen的方法是从另一个视图控制器(FirstViewController)调用的。 SecondViewController初始化后,此方法称为

setupHomeScreen内,创建UIView,我希望与主视图具有相同的边界,这取决于是以纵向还是横向模式查看iPad。

首次调用该方法时(在应用启动时),视图完全错误,NSLog输出显示self.view.frame.size.width等于0.0000

如果我导航至ThirdViewController,然后返回SecondViewController,则视图会正确显示,self.view.frame.size.width值为768

我已经尝试了很多不同的方法来解决这个问题,例如将方法的内容放在didRotateFromInterfaceOrientationviewDidAppear:方法中,但似乎没有任何效果。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

  

首次调用该方法时(在应用启动时),视图为   完全错误,NSLog输出显示   self.view.frame.size.width等于0.0000。

这可能是因为尚未加载视图。视图控制器在实际需要之前不会加载视图,这通常是在第一次显示视图时。如果您的代码在显示视图之前尝试查找视图的宽度,则很可能未加载视图。在Objective-C中,您可以向nil发送消息,结果将为0或nil,具体取决于预期的类型。

  

如果我导航到ThirdViewController,然后返回   SecondViewController,视图正确显示和   self.view.frame.size.width值为768。

这与上面的解释一致;一旦您显示了SecondViewController视图层次结构,这些视图就会被加载,找到视图的宽度也没问题。

只需访问视图控制器的view属性就足以导致加载视图层次结构。如果必须,您可以在致电self.view之前访问setupHomeScreen来解决问题。但是,一个更好的解决方案是在-viewDidLoad SecondViewController方法中设置视图的宽度,这将保持视图控制器的“延迟加载”行为(并节省内存),同时仍然确保您的视图是宽度将在需要时设置。