2009-12-01 21 views
7

UIViewを処理するUIViewControllerのサブクラスがあります。ビューコントローラはモーダルで表示されます(画面の下から上にスライドします)。ビューの一番上に、ナビゲーションバーを追加しました。このバーは、ナビゲーションコントローラによって処理されないことに注意してください。回転時のUINavigationBarのサイズ変更

ビューがランドスケープに回転するときに、navbarの高さが小さくなるようにしたいと思います(UINavigationControllerによって処理されるときの動作と同様です)。しかし、私はIBの自動高さマスクを柔軟な高さに設定することはできません。そうすることでコード内でnavbarが完全に消えるようになります。

これを行う方法はありますか?どのようにUINavigationControllerによって行われますか?

P.S.私はスケーリング変換に頼らざるを得ないことを望んでいる。なぜなら、これはタイトル内のテキストを混乱させるからである。

編集:少し助けて解決しました。下記の回答をお読みください。

答えて

1

私は解決策を見つけました。後ろ向きでは、私はむしろ馬鹿だと感じます。私は、ナビゲーションバーの自動サイズ変更マスクに柔軟なボトムマージンを追加するだけでした。クレジットを溶液に私を指摘し、このスレッドでユーザーRayNewbieによるものです:

http://discussions.apple.com/thread.jspa?messageID=8295525

+0

こんにちは、ナビゲーションバーにボタンがありますか?なぜなら、私は同じ問題を抱えています。ナビゲーションバーの自動サイズ変更マスクに柔軟なボトムマージンを含めると、ナビゲーションバーのサイズは変更されますが、ボタンは変更されません。 – Sefran2

+0

navBar.autoresizesSubviews = YES;を追加してください。また、navbarボタンの自動サイズ変更マスクを設定する必要があります –

+1

あなたのソリューションを投稿しますか?あなたが提供したリンクは壊れています。 – DCorrigan

5

自動サイズ変更マスクを設定するのではなく、viewWillAppearとdidRotateFromInterfaceOrientationで現在の向きを確認し、適切なフレームを設定するのはなぜですか?

- (void) updateNavBar { 
    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; 
    if ((UIInterfaceOrientationLandscapeLeft == orientation) || 
     (UIInterfaceOrientationLandscapeRight == orientation)) { 
     myNavBar.frame = CGRectMake(0, 0, 480, 34); 
    } else { 
     myNavBar.frame = CGRectMake(0, 0, 320, 44); 
    } 
} 
- (void) viewWillAppear { 
    [self updateNavBar]; 
    // ... SNIP ... 
} 
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { 
    [self updateNavBar]; 
    // ... SNIP ... 
} 
+0

私はそれを試して与えたが、それは、私はそれが望んでいたように動作しませんでした。具体的には、バーボタンの項目とタイトルが縮尺されていないため、画面上部に表示されませんでした。また、ナビゲーションバー自体は実際には縮尺されていないため、グラデーションはオフになっていました。私は、サブビューのいくつかのマニュアルリサイズをしようとし、それが動作するかどうかを確認しようとします... –

+0

私はさまざまな種類の変換obを使用してサブビューを試みたが、私はそれを見栄えに得ることができませんでした。 –

関連する問題