【问题标题】:View Based Apps, default views and frame positions基于视图的应用程序、默认视图和框架位置
【发布时间】:2011-06-05 19:28:44
【问题描述】:

我使用 Apple 的模板创建了一个基于视图的应用程序。我将代码添加到 viewDidLoad 方法中:

NSLog(@"origin (x, y): (%f, %f)", self.view.frame.origin.x, self.view.frame.origin.y);
NSLog(@"frame (w, h): (%f, %f)", self.view.frame.size.width, self.view.frame.size.height);

我的输出是:

2011-06-05 12:12:02.907 ViewBasedApp[1753:207] origin (x, y): (0.000000, 20.000000)
2011-06-05 12:12:02.908 ViewBasedApp[1753:207] frame (w, h): (320.000000, 460.000000)

为什么 XCode 将原点放在 (0, 20) 而不是 (0,0)?我没有更改任何其他默认设置。

我问的原因是当我使用基于窗口的应用程序并添加我自己的 UIViewController 子类并通过执行以下操作以编程方式添加它时:

SomeViewController *vc = [[SomeViewController alloc] initWithNibName:@"HomeView" bundle:nil];
    self.homeViewController = vc;
    [self.window addSubview:homeViewController.view];
    [vc release];

我的输出是:

2011-06-05 12:14:47.405 WhereAmIiPhone[1780:207] origin (x, y): (0.000000, 0.000000)
2011-06-05 12:14:47.405 WhereAmIiPhone[1780:207] frame (w, h): (320.000000, 460.000000)

我想知道为什么原点有 20 分的差异,以及我可以做些什么来避免我的观点被 20 分偏离。谢谢。

【问题讨论】:

    标签: iphone uiviewcontroller


    【解决方案1】:

    我相信这是由于状态栏的高度为 20 像素。

    这很正常,您不必担心,只需确保您的视图高度为 460 点。

    任何方式如果你想隐藏状态栏可以添加:

    状态栏最初是隐藏的 NO

    到您的 info.plist

    但请注意,Apple 要求您对此有充分的了解。

    编辑

    将您的观点降低 20 分尝试:

       mapview.frame = CGRectOffset(mapView.frame,0,20).
    

    【讨论】:

    • 好吧,看来我的观点已经是 460 了吧?当我在模拟器中运行它时,我的状态栏已启用(我也没有将其设置为关闭)。但是当我放入 MKMapView 之类的东西时,它在底部偏离了 20 像素。
    • 您是否以编程方式创建 MKMapView?这样您就可以将其框架设置为:self.view.bounds
    • 不,我只是将它放到 Interface Builder 中,看起来它占据了整个屏幕。然后当我运行它时,底部有 20px 的空白:-\.
    • 我相信你需要改变视图的y位置。您可以在 interfaceBuilder 中或通过设置:mapview.frame = CGRectOffset(mapView.frame,0,20)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多