0

iOS 7 にいくつかのビューを追加する必要があります。同時に、私のプロジェクトは iOS 6 で動作する必要があります。

ここに画像の説明を入力

どうすればプログラムでそれを行うことができますか? アプリの 2 つのバージョンで「i」ボタンの位置を同じにしたい。

4

4 に答える 4

3

メイン ビューのトップ バーのタイプは半透明のナビゲーション バーのようです。IB で Opaque Navigation Bar に変更してみてください。

新しい xCode にアップグレードしたときに同じ問題が発生しました。これは、古いバージョンでは不透明なタイプがリストの最初にあり、現在は半透明になっているためだと思います。

また、self.edgesForExtendedLayout = UIRectEdgeNone;あなたの UIViewController で試すことができます

于 2013-09-20T10:22:05.613 に答える
3

これがViewControllerに付けたカテゴリです。最も賢明な方法ではないかもしれませんが、私の意見ではうまくいきます。私のすべてのアプリは、UI をプログラムで構築します。ビューがロードされた後にビューのフレームをこれに設定すると、iOS 7 でも以前のバージョンと同じように動作します。スーパービューの特性ではなく、バージョンに依存しないという点で、コードは厄介ではありません。どんなコメントでも構いません。

@implementation UIViewController (effectiveContentFrame)

// determine frame size and offset to get the max frame we can get for the current view and orientation
// needed this after the introduction of iOS 7 where frames are handled slightly differently
// note: it uses the different heights/widths at the current rotation


/*
 iOS 6 portrait
  application Frame: = (0.000000,20.000000) 320.000000x460.000000 )
  superview Frame = (0.000000,20.000000) 320.000000x460.000000 )

 iOS7 portrait
  application Frame: = (0.000000,20.000000) 320.000000x460.000000 )
  superview Frame = (0.000000,0.000000) 320.000000x480.000000 )

 */
- (CGRect) effectiveContentFrame
    {
    CGRect rect;
    UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
    CGRect statusBarFrame = [UIApplication sharedApplication].statusBarFrame;
    CGFloat statusBarHeight = 0.;

    rect = self.view.superview.frame; // the frame will be relative to the superview. Note in iOS6 the root superview frame includes the

    if (UIInterfaceOrientationIsPortrait(orientation))
        {
        rect.size.height += rect.origin.y; // total height
        statusBarHeight = statusBarFrame.size.height;
        }
    else
        {
        rect.size.height += rect.origin.x; // total height
        statusBarHeight = statusBarFrame.size.width;
        }

    CGFloat extraHeight = 0;    // this is going to be how much extra height we have to take off of the total height of the frame,
                                // which is going to be the status bar+navbar+toolbar heights
    CGFloat topHeight = 0;      // this is the height of the stuff before the frame, which we are going to use as an offset


    if (![UIApplication sharedApplication].statusBarHidden)
        extraHeight += statusBarHeight;
   if (!self.navigationController.navigationBar.isHidden)
        extraHeight += self.navigationController.navigationBar.frame.size.height;
    topHeight = extraHeight;
    if (!self.navigationController.toolbar.isHidden)
        extraHeight += self.navigationController.toolbar.frame.size.height;

    rect.origin.y = topHeight - rect.origin.y;  // in iOS6 the status bar and navbar is already included in the origin but not in iOS7 .
    if (rect.origin.y < 0)
        rect.origin.y = 0;


    rect.size.height -= extraHeight;    // subtract status/nav and toolbar heights from the total height left in the superview

    return rect;
}
于 2013-09-20T06:52:05.583 に答える