【问题标题】:iOS 7 resizing main view to adjust for status bariOS 7 调整主视图大小以调整状态栏
【发布时间】:2013-09-29 01:32:24
【问题描述】:

我希望只调整主视图的大小,而不是调整应用程序中的每个 XIB。

我在 AppDelegate 中做了这个,部分成功:

if (kCFCoreFoundationVersionNumber > kCFCoreFoundationVersionNumber_iOS_6_1) {
    NSLog(@"iOs 7 detected");
    frame.origin.y += 20.0;
    frame.size.height -= 20.0;
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque];
}

self.window = [[[UIWindow alloc] initWithFrame:frame] autorelease];

整个窗口向下移动,状态栏显示得很好,但是我所有的视图现在对于屏幕来说都高了 20 像素,好像我的高度 -20 没有任何效果。

有人知道如何让主窗口的高度正确吗?

谢谢!

【问题讨论】:

  • 你能把图片展示一下吗?

标签: resize window ios7 statusbar adjustment


【解决方案1】:

可能的解决方案如下:您可以尝试更改根视图控制器框架大小,而不是更改窗口大小。这个解决方案对我有用。作为参考这里是我的代码。我已经在我的根视图控制器中添加了它,并在我的自定义 init 方法中调用它:

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7)
        {
            self.edgesForExtendedLayout = UIRectEdgeNone;
            CGRect frame=self.view.frame;
            frame.origin.y=20;
            frame.size.height-=20;
            self.view.frame=frame;
        }

【讨论】:

  • 感谢您的建议。不幸的是,这似乎对我不起作用。我确实检查以确保它是我的根视图控制器(从 AppDelegate 调用),并且我在 self.edges... 行上方添加了一个 NSLog 以确保正在调用代码。 IB 中的大多数视图都是自动调整大小的,所以我想知道它们是否只是调整大小以回收空间。
  • @rdiaz82 所以你必须为每个 ViewController 做这个?
  • @entropy 不,您应该在应用程序的每个根视图控制器中添加它。
【解决方案2】:

我通过覆盖根视图控制器并将我的“主”视图控制器附加到它来使其工作。也许有更好的工作方式并做到这一点,这是一种方式。

在您的 AppDelegate 中(applicationDidFinishLaunch 方法)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
     //用一个空的viewcontroller覆盖rootviewcontroller
     window.rootViewController = [[UIViewController alloc] init];

     //设置我的自定义视图控制器
     MyViewController *vc = [[MyViewController alloc] init];
     [vc setModalPresentationStyle:UIModalPresentationFullScreen];
     [window.rootViewController addChildViewController:vc];
     [window.rootViewController.view addSubview:vc.view];

      // 放入所需的大小和位置。
      vc.view.frame = CGRectMake(10.0, 100.0, 300.0, 100.0);

      ...

只是为了好玩。如果您正在使用 StoryBoard 进行项目,则相同的过程但获取 StoryBoard 标识符。请注意,在这种情况下,您必须在 Interface Builder 中为您的主视图控制器设置 StoryBoard ID。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
     UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
        // 从您在 Interface Builder 中设置的故事板 ID 获取视图控制器
        UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"MyMainViewController"];
        [vc setModalPresentationStyle:UIModalPresentationFullScreen];
        [window.rootViewController addChildViewController:vc];
        [window.rootViewController.view addSubview:vc.view];
        // 放入不想要的大小和位置。
        vc.view.frame = CGRectMake(10.0, 100.0, 300.0, 100.0);

      ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 2013-09-09
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多