2017-09-25 1 views
2

Depuis iOS 11 et Xcode 9 barbuttonitems et les titres ne sont plus visibles. Peu importe si je suis en train d'ajouter une vue personnalisée comme ceci:BarButtonItems et le titre n'apparaissent pas dans iOS 11

let backButton = UIButton.init(frame: CGRect(x: 0, y: 0, width: 180, height: 32)) 
     backButton.setImage(UIImage(named: "back_icon")?.withRenderingMode(.alwaysTemplate), for: .normal) 
     backButton.tintColor = UIColor.white 
     backButton.addTarget(self, action: #selector(backAction), for: .touchUpInside) 
     backButton.backgroundColor = UIColor.clear 
     backButton.titleLabel?.font = UIFont(name: SWMainHelper.sharedInstance.mediumFont, size: 18) 
     backButton.setTitleColor(UIColor.white, for: .normal) 
     backButton.setTitle("Go back", for: .normal) 

     backButton.sizeToFit() 

     backButton.titleEdgeInsets = UIEdgeInsets(top: 0, left: 16, bottom: 0, right: 0) 

     backButton.frame.size.width += 16 

     let negativeButtonSpace = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil) 
     negativeButtonSpace.width = -16 

     self.navigationItem.setLeftBarButtonItems([negativeButtonSpace, UIBarButtonItem(customView: backButton)], animated: true) 

ou tout simplement standards UIBarButtonItems comme ça:

let add = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addTapped)) 
     add.tintColor = UIColor.white 
     let play = UIBarButtonItem(title: "Play", style: .plain, target: self, action: #selector(playTapped)) 
     play.tintColor = UIColor.white 
     navigationItem.rightBarButtonItems = [add, play] 

Avec Xcode 8 tout a bien fonctionné.

Répondre

0

J'ai rencontré le même problème lors de la mise à jour vers l'IDE xCode9. J'ai pu résoudre ce problème en utilisant UINavigationBar.appearance:

let buttonItem = UIButton.appearance(whenContainedInInstancesOf: [UINavigationBar.self]) 
    buttonItem.setTitleColor(.black, for: .normal) 
    buttonItem.setTitleColor(.gray, for: .disabled) 
+0

Malheureusement, cela n'a pas résolu mon problème. Merci quand même! –

0

La chose étrange est que les boutons lorsqu'ils ne sont pas ajoutés tout (vous pouvez le voir la photo ci-jointe).

enter image description here

0

J'ai eu cette même question et aucune de ces fixes. Tout ce que j'ai fait était de mettre un width sur le titleView et tout a bien fonctionné!

EDIT:

Chaque UIViewController possède une propriété navigationItem, et chaque navigationItem a une titleView en option.

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

Dans mon cas, j'utilisais une coutume titleView et je pense que c'est la cause du problème, puisque Apple a changé l'API pour soutenir la nouvelle mise en page de la barre de navigation.

0

Ce problème survient lors de la compilation avec Xcode 9, car maintenant UIBarButtonItem utilise aussi le paramètre autolayput. Ci-dessous est le code pour le faire fonctionner.

UIButton *leftCustomButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 35, 100)]; 

     [leftCustomButton.widthAnchor constraintEqualToConstant:100].active = YES; 
     [leftCustomButton.heightAnchor constraintEqualToConstant:35].active = YES; 
     [leftCustomButton setTitle:@"TEST" forState:UIControlStateNormal]; 
     [leftCustomButton.titleLabel setFont:[UIFont boldSystemFontOfSize:16.0]]; 
     [leftCustomButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; 
     UIBarButtonItem * leftButtonItem =[[UIBarButtonItem alloc] initWithCustomView:leftCustomButton];   
     [self.navigationItem setRightBarButtonItems:@[leftButtonItem]];