IOS 11より前は、UINavigationBar
ボタンとタイトルが正しく表示されていました。
昨日、iOS 11でXcode 9をダウンロードしました。変更せずにビルドして実行した後、ナビゲーションボタンとタイトルの両方が表示されなくなりました。 UINavigationBar
は、設定している正しい色で表示されますが、それ以外は何も表示されません。
さまざまなシミュレーターで試してみましたが、iPhone 7をiOS 11 beta 5に更新しましたが、結果は同じです。何も表示されません。
誰かが同じ問題に直面しましたか?コードとストーリーボードのさまざまな部分を変更しようとしましたが、何も影響しません...
スクリーンショットで編集: http://imgur.com/a/Hy46c
前もって感謝します!
Xcode 9の場合、navigationItem titleViewに挿入されているカスタムビューのフレームを設定するだけでは不十分なようです。 titleViewの本質的なコンテンツサイズもオーバーライドして設定する必要があります。
コードは次のとおりです。必要に応じて幅と高さを調整します。
class NavigationBarTitleView: UIView {
override var intrinsicContentSize: CGSize {
return CGSize(width: bounds.width - 100, height: 50)
}
...
}
sizeToFit()を使用してください! iOS 11では自動的にサイズが調整されますが、IOS 10では調整されません
Xcode 9とiOS 11に更新した後、ナビゲーションバーにタイトルが表示されないというプロジェクトで同じ問題が発生しました。 Xcode 9でデフォルトでシステム0に設定されていたタイトルテキスト属性の下のタイトルフォントを、キャプション1や見出しなどの他のオプションに変更します。また、子ViewControllersのナビゲーションバー設定の[大規模タイトル]を[自動]または[常に]ではなく[なし]に変更しました。
継承されたコードベースでこのコードを見つけてコメントアウトし、すべてがiOS 11.x以前と同じように機能しました。
if (appDelegate.window.rootViewController != self) {
appDelegate.window.rootViewController = self;
}
コードで「window、rootViewController = ...」を設定しましたか?削除してみて問題を解決できます
私は同じ問題を抱えていましたが、私にとってはUITabBarControllerのサブクラス化が原因でした
Justin Vallelyのコメントに基づいて、ビューの適切なサイズ設定を確保するためにコードを少し修正しました。
class NavigationBarTitleView: UIView {
private var width: CGFloat = 0.0
private var height: CGFloat = 0.0
override init(frame: CGRect) {
super.init(frame: frame)
width = frame.width
height = frame.height
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override var intrinsicContentSize: CGSize {
return CGSize(width: width, height: height)
}
}
私の特定のケースでは、このビューをUISearchBarのコンテナとして使用しましたが、以前のiOSおよびSwiftで動作していたのと同じように、サイズが適切でSwift 4およびiOS 11で完全に動作しましたバージョン
使用してみてください:
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
または外観プロキシを現在のナビゲーションバーに直接設定しない...それは私の問題を解決し、AppleはiOS11のデフォルトとしてクリアするためにtitleTextを変更する必要があります...?
IOS 10と同じ外観が必要な場合にもこれを使用します。
if #available(iOS 11, *) {
nav.navigationBar.prefersLargeTitles = false
}
同じ問題が発生し、上記のいずれも修正されませんでした。しかし、@ Justin Vallelyが私を直してくれました。
私がしたことは、width
にtitleView
を設定するだけで、すべてがうまくいきました!
編集:
すべてのUIViewController
にはnavigationItem
プロパティがあり、すべてのnavigationItem
にはオプションのtitleView
があります。
参考: https://developer.Apple.com/documentation/uikit/uinavigationitem/1624935-titleview
私の場合、カスタムtitleView
を使用していましたが、Appleは新しいナビゲーションバーレイアウトをサポートするようにAPIを変更したため、これが問題の原因だと思います。
ナビゲーションバーの色はあるが、タイトルとボタンが表示されないという同じ問題に直面していました。画面にNavigation Controllerが表示されてから2秒後にNavigation Barの背景色の変更をトリガーすることにより、バーが存在することを再確認しました。 OPと同じですが、この問題はiOS 10ではなくiOS 11でのみ発生し、Xcode 9.1を実行するSwift 3.2を使用しています。
何時間もいじくり回した後、Navigation Controllerを提示し、UIApplication.shared.delegate.window.rootViewControllerとして(現在のアニメーションの後)作成すると、このケースで問題が発生することがわかりました。
現在のView Controllerをスキップし、Navigation ControllerをルートView Controllerとして作成するだけで、すべて正常に機能します。もちろん、この場合、現在のアニメーションは失われます。
NavigationButtonが表示されないという同じ問題がありました。 renderingModeを.alwaysOriginal
に設定することで解決しました。 (テンプレートを使用しませんでした)
Swift 3コード:
var img =R.image.smt()?.withRenderingMode(.alwaysOriginal)