web-dev-qa-db-ja.com

ナビゲーションバーのタイトルとナビゲーションボタンがiOS 11に表示されない

IOS 11より前は、UINavigationBarボタンとタイトルが正しく表示されていました。

昨日、iOS 11でXcode 9をダウンロードしました。変更せずにビルドして実行した後、ナビゲーションボタンとタイトルの両方が表示されなくなりました。 UINavigationBarは、設定している正しい色で表示されますが、それ以外は何も表示されません。

さまざまなシミュレーターで試してみましたが、iPhone 7をiOS 11 beta 5に更新しましたが、結果は同じです。何も表示されません。

誰かが同じ問題に直面しましたか?コードとストーリーボードのさまざまな部分を変更しようとしましたが、何も影響しません...

スクリーンショットで編集: http://imgur.com/a/Hy46c

前もって感謝します!

22
Leeroy Jenkins

Xcode 9の場合、navigationItem titleViewに挿入されているカスタムビューのフレームを設定するだけでは不十分なようです。 titleViewの本質的なコンテンツサイズもオーバーライドして設定する必要があります。

コードは次のとおりです。必要に応じて幅と高さを調整します。

class NavigationBarTitleView: UIView {

    override var intrinsicContentSize: CGSize {
        return CGSize(width: bounds.width - 100, height: 50)
    }

    ...

}
3
Justin Vallely

sizeToFit()を使用してください! iOS 11では自動的にサイズが調整されますが、IOS 10では調整されません

2
Carly O'Keefe

Xcode 9とiOS 11に更新した後、ナビゲーションバーにタイトルが表示されないというプロジェクトで同じ問題が発生しました。 Xcode 9でデフォルトでシステム0に設定されていたタイトルテキスト属性の下のタイトルフォントを、キャプション1や見出しなどの他のオプションに変更します。また、子ViewControllersのナビゲーションバー設定の[大規模タイトル]を[自動]または[常に]ではなく[なし]に変更しました。

1
rtamesis

継承されたコードベースでこのコードを見つけてコメントアウトし、すべてがiOS 11.x以前と同じように機能しました。

if (appDelegate.window.rootViewController != self) {
    appDelegate.window.rootViewController = self;
}
1
Shawn

コードで「window、rootViewController = ...」を設定しましたか?削除してみて問題を解決できます

1
Phong Cao

私は同じ問題を抱えていましたが、私にとってはUITabBarControllerのサブクラス化が原因でした

1
massimobio

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で完全に動作しましたバージョン

0

使用してみてください:

        UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]

または外観プロキシを現在のナビゲーションバーに直接設定しない...それは私の問題を解決し、AppleはiOS11のデフォルトとしてクリアするためにtitleTextを変更する必要があります...?

IOS 10と同じ外観が必要な場合にもこれを使用します。

        if #available(iOS 11, *) {
        nav.navigationBar.prefersLargeTitles = false
    }
0
jerrygdm

同じ問題が発生し、上記のいずれも修正されませんでした。しかし、@ Justin Vallelyが私を直してくれました。

私がしたことは、widthtitleViewを設定するだけで、すべてがうまくいきました!

編集:

すべてのUIViewControllerにはnavigationItemプロパティがあり、すべてのnavigationItemにはオプションのtitleViewがあります。

参考: https://developer.Apple.com/documentation/uikit/uinavigationitem/1624935-titleview

私の場合、カスタムtitleViewを使用していましたが、Appleは新しいナビゲーションバーレイアウトをサポートするようにAPIを変更したため、これが問題の原因だと思います。

0
Rafael Machado

ナビゲーションバーの色はあるが、タイトルとボタンが表示されないという同じ問題に直面していました。画面に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として作成するだけで、すべて正常に機能します。もちろん、この場合、現在のアニメーションは失われます。

0
casey

NavigationButtonが表示されないという同じ問題がありました。 renderingModeを.alwaysOriginalに設定することで解決しました。 (テンプレートを使用しませんでした)

Swift 3コード:

var img =R.image.smt()?.withRenderingMode(.alwaysOriginal)
0
pereckeSokSzam