5

典型的なNavControllerの動作は、port/landscapeでリサイズすることです。 44pxの高さから32pxまで(私の頭の上から)私は信じています。UINavigationBarをリピート時の回転で自動的にリサイズする

私はストーリーボードを使用しており、コントローラではなくVCにナビゲーションバーを含めています。縦と横の間を回転すると、ナビゲーションバーのサイズが自動的に変更されません。

が、私はこの答えを見てきましたが、これは助けない:Resizing UINavigationBar on rotation

ザ・ナビゲーションバーは、アプリケーションの委任にロードされた外観を介してコントローラです:

UIImage *portraitImage = [UIImage imageNamed:@"mainNavBar"]; 
UIImage *landscapeImage = [UIImage imageNamed:@"mainNavBarLandscape"]; 
[[UINavigationBar appearance] setBackgroundImage:portraitImage forBarMetrics:UIBarMetricsDefault]; 
[[UINavigationBar appearance] setBackgroundImage:landscapeImage forBarMetrics:UIBarMetricsLandscapePhone]; 

[[UINavigationBar appearance] setBackgroundColor:[UIColor blackColor]]; 
[[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys: 
                 [UIColor colorWithRed:245.0/255.0 green:245.0/255.0 blue:245.0/255.0 alpha:1.0], UITextAttributeTextColor, 
                 [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5],UITextAttributeTextShadowColor, 
                 [NSValue valueWithUIOffset:UIOffsetMake(0, 1)], 
                 UITextAttributeTextShadowOffset,nil]]; 

[[UINavigationBar appearance] setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin]; 

は残念ながら最後の部分は違いはありませんし、ナビゲーションバーが複数のコントローラに含まれているので、すべてのVCに対する上記の質問に同じグルーコードを繰り返して、回転でサイズを変更する必要はありません。

答えて

3
[[UINavigationBar appearance] setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin]; 

しかし、あなたは柔軟な高さを言っていませんでした。しかし、私が理解しているように、身長は柔軟性がありたいと思う非常に特徴的なものです。

+0

正解ですが、投稿した直後に気付きました。ありがとう – StuartM

0

私は受け入れられた答えでしたが、私は完全な制約ベースのレイアウトに移行したいと思っていました。

UINavBarのをデリゲートして、必要に応じて配置します。 IB(もちろん)に代理人を添付することを忘れないでください。

  • トップスペースへ::トップレイアウトガイド(0)にスペースをリードする
  • :スーパービュー(0)
  • トレーニングスペースへ:スーパーIBでUINavBar上の制約のために

    // In my view controller 
    
    #pragma mark - UIBarPositioningDelegate 
    - (UIBarPosition)positionForBar:(id<UIBarPositioning>)bar { 
        return UIBarPositionTopAttached; 
    } 
    

    (0)

  • 最も重要なことに...どんな種類の高さ制約もありません! -

高さは、実行時のコンテンツサイズによって決まります。もともと、私は750で垂直コンテンツの抱き合わせの優先順位を持っていたので、この仕事を正しく得ることができませんでしたが、それは間違っていました。私がデフォルト(250)に戻したとき、うまくいきました。

+0

上記のツールバーのサイズを調整することはないようです。私はそれが4インチ以下のデバイスでは高さ32フィート(高さ)になると考えています。このテクニックは、ステータスバーが存在するかどうかのツールバーの位置を調整することしかできないようです。 –

5

autolayoutを使用している場合、のintrinsicContentSizeはローテーションで正しく更新されますが、その高さはNSContentSizeLayoutConstraintではありません。 invalidateIntrinsicContentSizeを手動で呼び出すと、autolayoutはナビゲーションバーの高さの制約を更新するように指示します。

// View controller 
public override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) 
{ 
    super.viewWillTransition(to: size, with: coordinator); 

    self.navigationBar?.invalidateIntrinsicContentSize(); 
} 
関連する問題