it-swarm.com.de

Der Titel und die Navigationsschaltflächen der Navigationsleiste werden unter iOS 11 nicht angezeigt

Vor iOS 11 werden die Schaltflächen und der Titel UINavigationBar korrekt angezeigt.

Gestern habe ich Xcode 9 mit iOS 11 heruntergeladen. Nach dem Erstellen und Ausführen ohne Änderungen werden die beiden Navigationsschaltflächen und der Titel nicht mehr angezeigt. Es zeigt die UINavigationBar mit der korrekten Farbe, die ich eingestellt habe, aber sonst nichts.

Ich habe verschiedene Simulatoren ausprobiert und auch ein iPhone 7 auf iOS 11 Beta 5 aktualisiert. Das Ergebnis ist das gleiche. Nichts wird angezeigt.

Hat jemand das gleiche Problem gehabt? Ich habe versucht, verschiedene Teile des Codes und des Storyboards zu ändern.

BEARBEITEN mit Screenshots: http://imgur.com/a/Hy46c

Danke im Voraus!

21
Leeroy Jenkins

Für Xcode 9 scheint es nicht mehr genug zu sein, nur den Rahmen einer benutzerdefinierten Ansicht festzulegen, der in die Titelansicht von navigationItem eingefügt wird. Die intrinsische Inhaltsgröße Ihres titleView muss jetzt überschrieben und ebenfalls festgelegt werden.

Hier ist der Code, passen Sie die Breite und Höhe an Ihre Bedürfnisse an:

class NavigationBarTitleView: UIView {

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

    ...

}
3
Justin Vallely

Ich hatte das gleiche Problem in meinem Projekt, bei dem die Titel in den Navigationsleisten fehlten, nachdem auf Xcode 9 und iOS 11 aktualisiert wurde. Ich habe das Problem gelöst, indem ich zur Navigationsleiste meines Navigationscontrollers auf dem Storyboard ging und die großen Titel der Titel nicht aktiviert hat Ändern der Titelschriftart unter den Attributen für Titeltext, die standardmäßig in Xcode 9 auf System 0 festgelegt wurde, durch eine andere Option wie Caption 1 oder Headline. Ich habe auch die Navigationsleisteneinstellungen für untergeordnete Ansichtscontroller für Große Titel in Nie statt Automatisch oder Immer geändert.

1
rtamesis

Ich habe diesen Code in einer geerbten Codebase gefunden, auskommentiert und alles funktioniert wie vor iOS 11.x.

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

Haben Sie "window, rootViewController = ..." in Ihrem Code festgelegt? Versuchen Sie es zu entfernen, um Ihr Problem zu beheben

1
Phong Cao

Ich hatte das gleiche Problem und wurde für mich durch die Unterklasse UITabBarController verursacht

1
massimobio

benutze sizeToFit ()! iOS 11 wird automatisch in der Größe angepasst, iOS 10 jedoch nicht

0
Carly O'Keefe

Basierend auf dem Kommentar von Justin Vallely habe ich den Code ein wenig überarbeitet, um eine korrekte Größe der Ansicht zu gewährleisten:

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)
    }
}

In meinem speziellen Fall habe ich diese Ansicht als Container für UISearchBar verwendet. Jetzt ist sie gut dimensioniert und funktioniert perfekt mit Swift 4 und iOS 11, genau wie früher bei früheren iOS- und Swift-Versionen

0

Versuchen zu benutzen:

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

oder ohne Erscheinung Proxy-Einstellung direkt auf die aktuelle Navigationsleiste ... Es löst mein Problem, sollte Apple titleText in iOS11 als Standardeinstellung löschen ...?

Verwenden Sie dies auch, wenn Sie dasselbe Aussehen wie iOS 10 haben möchten:

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

Ich hatte das gleiche Problem und keines der oben genannten Probleme. Obwohl @Justin Vallely mich dazu brachte, das Problem zu beheben.

Alles was ich tat, war ein width auf dem titleView zu setzen und alles hat gut funktioniert!

BEARBEITEN:

Jedes UIViewController hat eine navigationItem-Eigenschaft, und jedes navigationItem hat ein optionales titleView.

Für Referenz: https://developer.Apple.com/documentation/uikit/uinavigationitem/1624935-titleview

In meinem Fall habe ich ein benutzerdefiniertes titleView verwendet, und ich denke, das ist die Ursache des Problems, da Apple die API geändert hat, um das neue Layout der Navigationsleiste zu unterstützen.

0
Rafael Machado

Wir hatten das gleiche Problem, wo die Farbe der Navigationsleiste angezeigt wird, der Titel und die Schaltflächen jedoch nicht angezeigt werden. Wir haben die Leiste noch einmal überprüft, indem wir 2 Sekunden nachdem der Navigationscontroller auf dem Bildschirm angezeigt wurde, eine Hintergrundfarbenänderung der Navigationsleiste ausgelöst haben. Wir wissen also, dass die Navigationsleiste vorhanden war und wir der richtigen Instanz Schaltflächen hinzugefügt haben. Wie beim OP erscheint dieses Problem nur unter iOS 11 und nicht unter iOS 10, und wir verwenden Swift 3.2 mit Xcode 9.1.

Nach stundenlangem Fummeln stellt sich heraus, dass das Präsentieren eines Navigationscontrollers als UIApplication.shared.delegate.window.rootViewController (nach der vorliegenden Animation) das Problem in unserem Fall verursacht hat.

Wenn Sie nur den aktuellen View-Controller überspringen und den Navigations-Controller als Root-View-Controller festlegen, funktioniert alles einwandfrei. Natürlich verlieren Sie die vorliegende Animation in diesem Fall.

0
casey

Hatte das gleiche Problem mit dem navigationButton nicht angezeigt. Ich habe es gelöst, indem ich den RenderingMode auf .alwaysOriginal gesetzt habe. (Ich habe keine Vorlagen verwendet) 

Swift 3 Code:

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