web-dev-qa-db-ja.com

iOSナビゲーションバーは大きなタイトルのスクロール動作を優先します

IOS 11では、prefersLargeTitlesを有効にすると、システムアプリはすべて、下にスクロールするとナビゲーションバーを圧縮します。

enter image description here

自分のアプリでこれを実装する方法がわかりませんが、バーはデフォルトで同じままです。

enter image description here

私が見ることができるのはスワイプでバーを非表示にすることだけですが、それはバーを圧縮するのではなく、バー全体を非表示にします。

enter image description here

これは、Xcode 9ベータで作成され、新しいストーリーボードが追加された空のプロジェクトです。

システムアプリと同じ動作をするために何をする必要がありますか?

6
lewis

Interface Builder/Storyboardで大きなタイトルに関しては何も設定しないでくださいコードのみ。それは私のために働いた。

そのため、ストーリーボードのナビゲーションバーで、[大きなタイトルを優先する]がオフになっています。

ビューコントローラの場合:

self.navigationController?.navigationBar.prefersLargeTitles = true

10
Claes

この問題はさまざまな理由で人々に起こっているようです。上記の答えはどれも私を助けませんでした、しかしここにDID仕事...

ストーリーボードのビュー階層である原因を見つけるために、アプリを分解しました。 UITableViewビューがViewControllerの最初のビューになっているようです。 UITableViewの後ろに2つのUIImageViewがあり、それが問題の原因でした。それらのUIImageViewsを削除すると、すべてが正しく機能しました。

私の修正:コードでUIViewを作成し、それに2つの画像ビューを追加してから、そのUIViewUITableview.backgroundViewに追加しました。

これが誰かを助けることを願っています。

3
Ponyboy

古いiOSバージョンをターゲットにする必要がある場合は、割り当てを可用性チェックでラップする必要もあります。

if #available(iOS 11, *) {
    self.navigationController?.navigationBar.prefersLargeTitles = true
}
1
if #available(iOS 11.0, *) {
    navigationController?.navigationBar.prefersLargeTitles = true
    navigationController?.navigationBar.topItem?.title = "Hello"
    navigationController?.navigationItem.largeTitleDisplayMode = .automatic

    let attributes = [
        NSAttributedStringKey.foregroundColor : UIColor.red,
        ]

    navigationController?.navigationBar.largeTitleTextAttributes = attributes
} else {
    // Fallback on earlier versions
}

http://iosrevisited.blogspot.in/2017/09/navigation-bar-with-large-titles-and.html

1
Sai Sandeep