Je suis en train d'ajouter un titre volumineux dans la barre de navigation de l'une des applications. Le problème est que le titre est un peu long, il faudra donc ajouter deux lignes en gros titre. Comment puis-je ajouter titre large avec deux lignes dans la barre de navigation?
Il ne s'agit pas du titre de la barre de navigation par défaut! Il s’agit d’un gros titre introduit dans iOS 11. Veillez donc à ajouter des suggestions en considérant les gros titres. Merci
Obtenez un sous-aperçu d'élément de navigation et localisez-le UILabel.
Essayez ceci et voyez:
self.navigationController?.navigationBar.prefersLargeTitles = true
self.navigationController?.navigationItem.largeTitleDisplayMode = .automatic
self.title = "This is multiline title for navigation bar"
self.navigationController?.navigationBar.largeTitleTextAttributes = [
NSAttributedStringKey.foregroundColor: UIColor.black,
NSAttributedStringKey.font : UIFont.preferredFont(forTextStyle: .largeTitle)
]
for navItem in(self.navigationController?.navigationBar.subviews)! {
for itemSubView in navItem.subviews {
if let largeLabel = itemSubView as? UILabel {
largeLabel.text = self.title
largeLabel.numberOfLines = 0
largeLabel.lineBreakMode = .byWordWrapping
}
}
}
Voici le résultat:
Basé sur @krunal answer, cela fonctionne pour moi:
extension UIViewController {
func setupNavigationMultilineTitle() {
guard let navigationBar = self.navigationController?.navigationBar else { return }
for sview in navigationBar.subviews {
for ssview in sview.subviews {
guard let label = ssview as? UILabel else { break }
if label.text == self.title {
label.numberOfLines = 0
label.lineBreakMode = .byWordWrapping
label.sizeToFit()
UIView.animate(withDuration: 0.3, animations: {
navigationBar.frame.size.height = 57 + label.frame.height
})
}
}
}
}
}
Dans le UIViewController:
override func viewDidLoad() {
super.viewDidLoad()
self.title = "This is a multiline title"
setupNavigationMultilineTitle()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
setupNavigationMultilineTitle()
}
Et pour définir la police et la couleur sur le grand titre:
navigation.navigationBar.largeTitleTextAttributes = [NSAttributedStringKey.foregroundColor: .red, NSAttributedStringKey.font: UIFont.boldSystemFont(ofSize: 30)]
Ici, vous pouvez ajouter une UILabel
multiligne dans la NavigationTitle
. Vous pouvez le faire avec une sorte de personnalisation dans votre code et mettre la UILabel
sur self.navigationItem.titleView
let label = UILabel()
label.backgroundColor = .clear
label.numberOfLines = 2
label.font = UIFont.boldSystemFont(ofSize: 16.0)
label.textAlignment = .center
label.textColor = .black
label.text = "JUV vs LFC\nUEFA Championship"
self.navigationItem.titleView = label
Cheers passe une bonne journée.