Cocoa Touch WWDCビデオの新機能のAppleの人は、新しい大型タイトルナビゲーションバーが基本ビューの最上位のスクロールビューに魔法のように接続されると言いました コントローラーを上下にスクロールしながら自動的に折りたたみ/展開します。 (そして、「魔法のように」、おそらく彼は、この機能を既に恥ずかしいUINavigationController
-UINavigationBar
-UINavigationitem
APIに使用可能な方法でパッチすることに失敗したことを意味したので、背後でヒューリスティックに選択されたスクロールビューに接続します)
基本的なUINavigationController
+ UITableView
/UICollectionView
セットアップからわずかに逸脱すると、この「自動」折りたたみ/展開が機能しないことを準備していましたが、これでも最も単純な場合、期待どおりに動作しません。
ここに私が持っているものがあります:
UITabBarController
を含むUINavigationController
を含むUIViewController
を含むUITableView
を含むview
。テーブルの最初のセルをタップすると、ナビゲーションスタックの2番目のビューコントローラーがプッシュされます。
コードなし、ストーリーボードのみ。
ナビゲーションバーの大きなタイトルをアクティブにするために、 "大きなタイトルを優先する"をチェックしました。ここで、アプリを実行してテーブルビューを上下にスクロールすると、ナビゲーションバーは同じ(大きな)サイズのままです。それは崩壊しません:
ただし、2番目のView Controllerのナビゲーションアイテムを設定して、小さなナビゲーションバーを使用すると( "Large Title"の値を設定することで、 "Never")、そのページを開いて戻ると、最初のページでインタラクティブな折りたたみが魔法のように動作し始めます:
ここに何か不足していますか、またはこの機能は正常に動作していませんか?私が使用しているサンプルプロジェクトは次のとおりです。 https://github.com/tzahola/iOS-11-Large-Title-Navigation-Bar
ところで、ベータ版ではなく、公式にリリースされたiOS 11を使用しています。
2017-09-23更新:Appleにバグレポートを送信し、openradar.meでチケットを開きました: http://www.openradar.me/radar?id = 5017601935671296
良いニュースです!ストーリーボードで "Large Titles"を "Never"に設定してから設定すると、コードを介して、それは動作します:
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeAutomatic;
}
Appleは、ナビゲーションアイテムのlargeTitleDisplayMode
がInterface Builderを介して設定されている場合の処理を忘れていたようです。
この問題が解決するまで、ストーリーボード上で "大タイトル"を "Never"のままにして、viewDidLoad
のコードで設定します。 。
最初のView Controllerに対して行う必要があります。後続のView Controllerは、ストーリーボードの値を尊重します。
または、ストーリーボードで何かを変更する代わりに、これを行います:
override func viewDidLoad() {
super.viewDidLoad()
if #available(iOS 11.0, *) {
self.navigationItem.largeTitleDisplayMode = .never
self.navigationItem.largeTitleDisplayMode = .always
}
}
どの言語でも!
これは、ナビゲーションアイテムの大きなタイトルが、前の画面ナビゲーションアイテムのタイトルの大きなタイトルの動作に基づいて折りたたむかどうかを決定するためです。
コメントできないので、投稿した回答をここで共有します
https://stackoverflow.com/a/47493375/8385022
基本的にこのサイトで回避策を見つけました。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
}
Replying to @sakuya__
みんな私も同じ問題を抱えていた。 Navigation Controllerの最初のView Controllerに次のスニペットを追加することで、この問題を解決できました
navigationController?.navigationBar.prefersLargeTitles = true