【问题标题】:frame of Root ViewController's View when loaded programmatically以编程方式加载时的 Root ViewController 视图的框架
【发布时间】:2012-07-11 15:19:41
【问题描述】:

我在启动时以横向模式加载根视图控制器(不使用界面构建器)。 在 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 返回纵向模式的宽度而不是横向。

提前致谢

编辑:

【问题讨论】:

    标签: objective-c ios5 uiviewcontroller


    【解决方案1】:

    实现-loadView方法:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我已经在 info.plist 文件中将支持的方向设置为横向左右横向,并将初始界面方向设置为横向右侧。我的应用程序在横向模式下启动没有问题 self.frame 返回纵向帧大小而不是横向帧大小。
      【解决方案3】:

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

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-22
        • 2014-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多