当以编程方式加载Root ViewController的视图框架
问题描述:
Im在启动时以横向模式加载根视图控制器(不使用接口构建器)。 在viewDidLoad中,我加入子视图根视图控制器视图,像这样当以编程方式加载Root ViewController的视图框架
- (void)viewDidLoad
{
[super viewDidLoad];
// self.view.
UIView *toolBar=[[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 50)];
toolBar.backgroundColor=[UIColor darkGrayColor];
[self.view addSubview:toolBar];
//code contiues...
}
但肖像模式,而不是风景self.view.frame.size.width返回宽度。
在此先感谢
编辑:
答
贯彻-loadView
方法:
- (void)loadView
{
self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
}
而且通常父视图控制器负责设置它的儿童的帧大小视图控制器观点。在根视图控制器的情况下,我相信它需要它所附的UIWindow的大小(所以如果你在你的应用程序委托中设置窗口大小,你可以使用[[UIView alloc] init]
,然后在-loadView
方法中设置自动识别掩码) 。 根据您自己的代码,您可能需要在上述代码中考虑状态栏。
答
可能是,纵向模式是先在你的项目文件(点击在Xcode中,在目标信息选项卡项目,单位支持的接口方向)?如果是这样,你的应用程序可以纵向启动,然后发送viewDidLoad并旋转到横向。
答
当您不使用Interface Builder/xib文件,也不在loadview
内手动创建视图时,系统会创建一个具有最大尺寸的视图。这在loadview
方法文档中所述:
如果视图控制器不具有相关联的笔尖文件,此 方法创建一个普通的UIView对象来代替。
该系统产生的UIView对象都有一个变换属性,是不是identiy改造,因此你不能依靠从框架属性值规定在这里:
警告:如果此属性不是标识转换,则框架属性的值为 未定义,因此应予以忽略。
那么,你应该改为什么呢?我想最好的解决方案是使用你的UIView的bounds
属性。这包含已经旋转的坐标。
我已经在info.plist文件中设置了支持的方向来左右横向和初始界面orientatio到landcape。我的应用程序在横向模式下启动时没有问题self.frame正在返回纵向帧大小而不是横向帧大小。 – 2012-07-12 05:13:03