ナビゲーションコントローラーに埋め込まれている通常のビューコントローラーがあります。このビューコントローラーには、セーフエリアの制約を使用するテーブルビューがあります。 (私はテーブルビューコントローラーを使用しません)
ナビゲーションコントローラーは大きなタイトルを優先するように設定され、モードは.alwaysに設定されます。ベータ2ではこれは完全に機能しました。そのため、タイトルに入ると大きくなり、スクロールすると小さくなりました(通常のように)。しかし、ベータ3以降、これは機能しなくなりました。
これをオンに戻す方法、またはテーブルビューをスクロールしたときにサイズが小さくなるようにする方法は誰でも知っています。すべての新しいiOS 11アプリの動作が好きですか?
または、これはSwift 4/iOS 11の現在のバージョンのバグですが、メッセンジャーや設定などのアプリは引き続きこのように動作します。
前もって感謝します。
私にとっては、ストーリーボードでブール値の「Prefers Large Titles」をtrueに設定した場合、それは大きいままになります。これをコードでオンにすると、期待どおりに機能します!
基本的にこのサイトで回避策を見つけました。tableView(またはスクロールを持つ要素)がビュー階層の最初のビューでない場合、大きなタイトルが自動的に非表示になりません。
https://markusbodner.com/2017/10/08/fix-large-navigation-bar-title-not-hiding-on-scroll-in-ios-11/
WillAppearビューに追加しました:
if #available(iOS 11.0, *) {
navigationController?.navigationBar.prefersLargeTitles = true
} else {
// Fallback on earlier versions
}
(void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView.contentOffset.y > 0) { //20
[self.navigationController.navigationBar setPrefersLargeTitles:NO];
} else {
[self.navigationController.navigationBar setPrefersLargeTitles:YES];
}
}
プログラマティックレイアウトを使用していて、大きなタイトルで同様の問題が発生しました。私はここに解決策を見つけました: https://stackoverflow.com/a/46692583/131378 。 viewDidLoad()
では、largeTitleDisplayMode
をオフにしてから再びオンにする必要がありました。これは、大きなタイトルがスクロールで機能する正しい組み合わせでした。
self.navigationItem.largeTitleDisplayMode = .never
self.navigationItem.largeTitleDisplayMode = .always
IBのナビゲーションバーで「大きいタイトルを優先」を確認するか、次を使用します。
navigationController?.navigationBar.prefersLargeTitles = true