2017-10-17 4 views
2

L'Etiquette 11 déplace légèrement l'étiquette principale par le haut plutôt que de la maintenir en haut. Le problème se produit uniquement sur IOS 11. Avec différents IOS tout semble ok.IOS 11 uniquement: Etiquette de la barre de navigation désactivée

Exemple de code

avec un en-tête de réglage:

private func setHeader(agentName: String = "", isTyping: Bool = false) -> Void { 
    if (agentName.isEmpty) { 
     self.containerViewController?.navigationItem.titleView = nil 
    } else { 
     let headerView: UIView = { 
      let rect = CGRect(x: 0, y: 0, width: 320, height: 44) 
      let uiview = UIView(frame: rect) 

      return uiview 
     }() 


     let headerLabel: UILabel = { 
      let label = UILabel(frame: CGRect(x: 0, y: 0, width: headerView.frame.width, height: 20)) 
      label.font = UIFont.systemFont(ofSize: 18) 
      label.textAlignment = .center 
      label.translatesAutoresizingMaskIntoConstraints = false 
      return label 
     }() 

     let subheaderLabel: UILabel = { 
      let label = UILabel(frame: CGRect(x: 0, y: 0, width: headerView.frame.width, height: 12)) 
      label.font = UIFont.systemFont(ofSize: 12) 
      label.translatesAutoresizingMaskIntoConstraints = false 
      label.text = self.title 
      return label 
     }() 


     headerView.addSubview(headerLabel) 
     headerView.addSubview(subheaderLabel) 

     let viewsDictionary = ["header": headerLabel, "subheader": subheaderLabel] 
     headerView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[header]|", options: NSLayoutFormatOptions(), metrics: nil, views: viewsDictionary)) 
     headerView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[subheader]|", options: NSLayoutFormatOptions(), metrics: nil, views: viewsDictionary)) 
     headerView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[header(20)]-[subheader]", options: [], metrics: nil, views: viewsDictionary)) 

     self.containerViewController?.navigationItem.titleView = headerView 

    } 
} 

Label off

Répondre

2

À partir de 11 iOS, vues ajouter aux barres d'outils sont maintenant mis à l'aide de la mise en page automatique. Vous devez ajouter des contraintes de dimensionnement sur votre headerView. Par exemple:

headerView.widthAnchor.constraintEqualToConstant(320.0).isActive = true 
headerView.heightAnchor.constraintEqualToConstant(44.0).isActive = true 

Sinon, la mise en forme automatique utilisera la taille de contenu intrinsèque de votre vue d'en-tête qui n'est probablement pas celle que vous attendez.

Pour plus d'informations, voir la session WWDC 2017 Updating your app for iOS 11.

0

@beyowulf a dit que vous devez ajouter des contraintes de dimensionnement. Je pense que dans votre cas, ajouter height constraint est correct:

headerView.heightAnchor.constraint(equalToConstant: 22.0).isActive = true