web-dev-qa-db-fra.com

Titre de la barre de navigation et boutons de navigation n'apparaissant pas sur iOS 11

Avant iOS 11, les boutons UINavigationBar et le titre étaient affichés correctement.

Hier, j'ai téléchargé Xcode 9 avec iOS 11 et, après avoir construit et exécuté sans apporter de modifications, les boutons de navigation et le titre ne sont plus affichés. Il affiche le UINavigationBar avec la couleur correcte que je mets mais rien d’autre.

J'ai essayé différents simulateurs et j'ai également mis à jour un iPhone 7 pour iOS 11 bêta 5 et le résultat est identique. Rien n'est affiché.

Quelqu'un a-t-il rencontré le même problème? J'ai essayé de changer différentes parties du code et du storyboard mais rien n'affecte ...

EDIT avec des screenshots: http://imgur.com/a/Hy46c

Merci d'avance!

21
Leeroy Jenkins

Pour Xcode 9, il semble qu'il ne suffit plus de définir simplement le cadre d'une vue personnalisée en cours d'injection dans navigationItem titleView. La taille du contenu intrinsèque de votre titleView doit maintenant être remplacée et définie.

Voici le code, ajustez la largeur et la hauteur à vos besoins:

class NavigationBarTitleView: UIView {

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

    ...

}
3
Justin Vallely

J'ai eu le même problème dans mon projet où les titres étaient absents des barres de navigation après la mise à jour vers Xcode 9 et iOS 11. Je l'ai résolu en accédant à la barre de navigation de mon contrôleur de navigation sur le story-board, en laissant l'option Préférer les grands titres décochée et changer la police de titre sous les attributs de texte de titre, qui a été définie par défaut dans Xcode 9 sur Système 0 en une autre option comme Légende 1 ou Titre. J'ai également modifié les paramètres de la barre de navigation de ses enfants dans ViewControllers: Grand titre, jamais, au lieu de automatique ou toujours.

1
rtamesis

J'ai trouvé ce code dans une base de code héritée, je l'ai commenté et tout a fonctionné comme avant iOS 11.x.

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

Avez-vous défini "window, rootViewController = ..." dans votre code? Essayez de le supprimer peut résoudre votre problème

1
Phong Cao

J'ai eu le même problème et pour moi il a été causé par le sous-classement UITabBarController

1
massimobio

utilisez sizeToFit ()! ios 11 le redimensionne automatiquement, mais pas iOS 10

0
Carly O'Keefe

Sur la base du commentaire de Justin Vallely, j'ai légèrement retravaillé le code pour garantir un dimensionnement correct de la vue:

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

Dans mon cas particulier, j'ai utilisé cette vue en tant que conteneur de UISearchBar et, à présent, elle est bien dimensionnée et fonctionne parfaitement avec Swift 4 et iOS 11, comme elle fonctionnait auparavant sur les versions précédentes d'iOS et de Swift

0
Alexander Telegin

Essayez d'utiliser:

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

ou sans configuration du proxy d’apparence directement dans la barre de navigation actuelle ... Cela résout mon problème. Apple doit-il modifier titleText pour effacer par défaut dans iOS11 ...?

Utilisez également ceci si vous voulez le même look que iOS 10:

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

J'ai eu le même problème et aucun de ce qui précède n'a été corrigé . Bien que @Justin Vallely me conduise à le réparer.

Tout ce que j'ai fait était de définir une width sur la titleView et tout a bien fonctionné!

MODIFIER:

Chaque UIViewController a une propriété navigationItem et chaque navigationItem a un titleView facultatif.

Pour référence: https://developer.Apple.com/documentation/uikit/uinavigationitem/1624935-titleview

Dans mon cas, j’utilisais une titleView personnalisée et je pense que c’est la cause du problème, car Apple a modifié l’API pour prendre en charge la nouvelle présentation de la barre de navigation.

0
Rafael Machado

Nous avions le même problème: la couleur de la barre de navigation était présente, mais le titre et les boutons n’apparaissaient pas. Nous avons vérifié deux fois que la barre s’y trouvait en déclenchant un changement de couleur d’arrière-plan dans la barre de navigation 2 secondes après l’affichage du contrôleur de navigation à l’écran. Nous savons donc que la barre de navigation était présente et que nous ajoutions des boutons à la bonne instance. Comme pour l'OP, ce problème n'apparaît que sur iOS 11 et non sur iOS 10, et nous utilisons Swift 3.2 avec Xcode 9.1.

Après des heures de manipulation, il est apparu que la présentation d'un contrôleur de navigation, puis son paramétrage en tant que UIApplication.shared.delegate.window.rootViewController (après l'animation actuelle) étaient à l'origine du problème dans notre cas.

Si vous ignorez simplement le contrôleur de vue actuel et faites du contrôleur de navigation le contrôleur de vue racine, tout fonctionne correctement. Bien sûr, vous perdez l'animation actuelle dans le cas.

0
casey

Le même problème avec le bouton de navigation ne s’est pas affiché. Je l'ai résolu en définissant le renderingMode sur .alwaysOriginal. (Je n'ai pas utilisé de modèles) 

Swift 3 code:

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