0

我在启动时以横向模式加载根视图控制器(不使用界面构建器)。在 viewDidLoad 中,我将子视图添加到根视图控制器视图中,如下所示

- (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 返回纵向模式的宽度而不是横向。

提前致谢

编辑: 图片供参考

4

3 回答 3

0

当您不使用 Interface Builder/xib 文件并且也没有在 中手动创建视图loadview时,系统会创建一个具有最大尺寸的视图。这在loadview方法文档中有所说明:

如果视图控制器没有关联的 nib 文件,则此方法将创建一个普通的 UIView 对象。

此系统生成的 UIView 对象具有不是身份转换的转换属性,因此您不能依赖 frame 属性中的值,如下所述:

http://developer.apple.com/library/ios/documentation/uikit/reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/instp/UIView/transform

警告:如果此属性不是恒等变换,则 frame 属性的值未定义,因此应被忽略。

那么,你应该怎么做呢?我想最好的解决方案是使用bounds你 UIView 的属性。这包含已经旋转的坐标。

于 2012-10-11T21:57:09.520 回答
0

可能是,纵向是您的项目文件中的第一个(单击以在 xcode 中进行项目,目标中的信息选项卡,单元支持的界面方向)?如果是这样,您的应用程序可以纵向启动,然后仅在此之后发送 viewDidLoad 并旋转到横向。

于 2012-07-11T15:35:38.150 回答
0

实现-loadView方法:

- (void)loadView
{
    self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
}

同样通常父视图控制器负责设置其子视图控制器视图的帧大小。在根视图控制器的情况下,我相信它会占用它所附加的 UIWindow 的大小(因此,如果您在应用程序委托中设置窗口大小,则可以使用[[UIView alloc] init]然后在-loadView方法中设置自动调整大小掩码)。您可能需要在上述代码中考虑状态栏,具体取决于您自己的代码。

于 2012-07-12T06:43:40.230 回答