2

上部にアクションバー(4つのボタンがあるビュー)、テーブルビュー、そしてテーブルビューの下に別のビューを含むビューを作成するカスタム UIViewController があります。レイアウトはすべてコードで行われ、自動レイアウトは使用されていません。iOS 7.0 および 7.0.2 を搭載したさまざまなデバイスですべてが完全に機能しますが、シミュレーターでは、コントローラーのルート ビューがナビゲーション バーの下ではなく、画面の右上隅 (0,0) に固定されます。

viewDidAppear: メソッドでリレーを強制的に実行するつもりですが、これはハックのようです...

洞察をありがとう

ここに画像の説明を入力 編集:画像を追加しました。UIView が強調表示されていることがわかります。ManicMonkOnMac が述べたように、UIView はツールバーの下にあります (ただし、これはシミュレーターでのみ発生し、デバイスではビューが正常に整列します) コントローラーの loadView メソッドで、ビューを作成するときにフレームを設定します。

- (void)loadView
{
    // Our parent view controller will resize us appropriately. The size set
    // here is a convenience for initial view layout.
    self.view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 320)];
    self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
}

しかし、このフレームは後で変更されます。ただし、私のコードではなく、UIkit コードによる)

Edit2: loadView メソッド本体を追加

4

1 に答える 1

3

編集: WWDC 2013 のセッション 201 を通過した後、解決策があると思います。

iOS 7 には、View Controller に設定して、ビューをナビゲーション バーと重ねるかどうかを指定できるプロパティがあります。

viewController.edgesForExtendedLayout = UIRectEdgeNone;//UIRectEdgeAll specifies that nav bars should overlap the view.

iOS 6 とは異なり、iOS 7 ではナビゲーション バーがビューの上に配置されます。

ナビゲーション バーを除くフレーム サイズを使用します。

コード:

CGRect フレーム = CGRectMake(self.view.frame.origin.x,self.view.frame.origin.y+self.navigationController.navigationBar.frame.size.height,self.view.frame.size.width,self.view .frame.size.height);

CustomView *view = [[CustomView alloc] initWithFrame:frame];

[self.view addSubview: ビュー];

于 2013-10-09T17:21:09.610 に答える