10

iOS 6 で半透明のナビゲーション バーを表示するようにアプリを作成しました。下部に 20px がありません。デバイスに iOS 7 が搭載されているかどうかを確認し、それに応じてコンテンツを調整するという非常に面倒なコード変更を行うことはできると思いますが、これは大変な作業になるのではないかと心配しています。

理想的には、すべてのビュー コントローラーのビューの上部に 20 ピクセルのパディングを追加して、コンテンツが下に移動し、iOS 6 の不透明なナビゲーション バーで正常に機能するようにしたいと考えています。

件名1 2に関するスレッドを読みましたが、提供された回答のどれも私の問題を解決しませんでした。

私はInterface Builderを使用しておらず、すべてのVCはプログラムで作成されていることに注意してください。

4

5 に答える 5

6

を使用している場合は、以下に示すように、一番上のビューから をauto layout追加するだけで、上部の間隔に注意する必要があります。Vertical ConstraintTop Layout Guide

ここに画像の説明を入力

詳細情報: https://developer.apple.com/library/ios/qa/qa1797/_index.html

于 2013-09-26T00:50:50.870 に答える
5

ビューの上部を常に 20px (ステータスバーの高さ) で埋めるために私が行ったことは次のとおりです。

AppDelegate の application:didFinishLaunchingWithOptions: メソッドでこのコードを使用しました

...
// container holds my root view controller
UINavigationController *container = [UINavigationController alloc] init...];
...

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) { // iOS 7
    // Create parent controller that will contain your existing root view controller's view shifted 20 px down to account for the status bar.
    UIViewController *newRootController = [[UIViewController alloc] init];

    // Add my old root view controller as a child
    [newRootController addChildViewController:container];

    // Add its view as a subview
    [newRootController.view addSubview:container.view];

    // Call this method because it does some configuration?
    [container didMoveToParentViewController:newRootController];

    // Now just position the view starting at point (0, 20)
    UIView *aView = container.view;

    NSDictionary *viewDictionary = NSDictionaryOfVariableBindings(aView);
    NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20-[aView]|" options:0 metrics:nil views:viewDictionary];

    [newRootController.view addConstraints:constraints];
    constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[aView]|" options:0 metrics:nil views:viewDictionary];

    [newRootController.view addConstraints:constraints];

    self.window.rootViewController = newRootController;
} else { // pre iOS 7
    self.window.rootViewController = container;
}

iOS 7 では常に、20 ピクセル下にシフトされたルート ビュー コントローラーのビューにすべてが存在します。AppDelegate でこれを行う必要があるのは 1 回だけです。

于 2013-09-19T19:56:30.213 に答える
4

UIViewControllerBasedStatusBarAppearance' to NO in info.plist (To opt out of having view controllers adjust the status bar style so that we can set the status bar style by using theUIApplicationstatusBarStyle` メソッドを設定します。)

AppDelegate のアプリケーションで:didFinishLaunchingWithOptions を呼び出す

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
    [application setStatusBarStyle:UIStatusBarStyleLightContent];
    self.window.clipsToBounds =YES;
    self.window.frame =  CGRectMake(0,20,self.window.frame.size.width,self.window.frame.size.height-20);

    //Added on 19th Sep 2013
    self.window.bounds = CGRectMake(0, 20, self.window.frame.size.width, self.window.frame.size.height);
}
return YES;
于 2013-09-25T09:05:16.867 に答える
2

次のように設定することで、iOS 7 のトップバーの下にあるビューを無効にすることができます。

if([controller canPerformAction:@selector(setEdgesForExtendedLayout:) withSender:self]) {
        [controller setEdgesForExtendedLayout:UIRectEdgeBottom | UIRectEdgeLeft | UIRectEdgeRight];
}
于 2013-09-25T12:22:50.940 に答える