5

最近 iOS6 アプリをリリースしましたが、iOS 7 用に更新する必要があります。新しいステータス バーは少し問題です。self.view のフレーム/境界が変更されたようで (+20 ポイント)、self.view.bounds を使用していくつかの要素の配置を決定します。私はいくつかの解決策を見てきました。基本的に、iOS 6 ステータス バーをサポートしながら、アプリを更新する必要があります。これに対するベストプラクティスはありますか?

以下のコードは、iOS 7 デバイスを検出してコンテンツを所定の位置に移動するように見えますが、他の問題も引き起こします。とにかく、これが最善の方法であるとは確信していません。

if([[[[UIDevice currentDevice] systemVersion] componentsSeparatedByString:@"."][0] intValue] >= 7) {
    CGRect statusBarViewRect = [[UIApplication sharedApplication] statusBarFrame];
    float heightPadding = statusBarViewRect.size.height+self.navigationController.navigationBar.frame.size.height;

    [myContentView setFrame:CGRectMake(0, heightPadding, self.view.frame.size.width, self.view.frame.size.height - heightPadding)];
}

ここに画像の説明を入力

4

2 に答える 2

11

iOS7 SDK で edgeForExtendedLayout と呼ばれる新しいプロパティを実装することで、これを実現できます。これを実現するには、次のコードを追加してください。

if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
        self.edgesForExtendedLayout = UIRectEdgeNone;

-(void)viewDidLoad メソッドに上記のコードを追加する必要があります。

于 2013-09-20T05:18:48.720 に答える
0

このソリューションを使用して、モーダル ダイアログでビューを調整しました。

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) {
        CGRect sbFrame = [[UIApplication sharedApplication] statusBarFrame];
        __block CGRect vFrame = self.view.frame;
        __block CGFloat diff = sbFrame.size.height + sbFrame.origin.y - vFrame.origin.y;
        if (diff > 0.0)
        {
            [UIView animateWithDuration:UINavigationControllerHideShowBarDuration
                                  delay:0.0
                                options: UIViewAnimationOptionCurveEaseOut
                             animations:^{
                                 vFrame.origin.y += diff;
                                 vFrame.size.height -= diff;
                                 self.view.frame = vFrame;
                             }
                             completion:^(BOOL finished){
                                 NSLog(@"Done!");
                             }];
        }
    }
}
于 2013-10-27T15:09:17.983 に答える