web-dev-qa-db-fra.com

Comment définir plusieurs lignes en gros titre dans la barre de navigation? (Nouvelle fonctionnalité d'iOS 11)

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 

 enter image description here

9
Jigar Thakkar

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:

 enter image description here

9
Krunal

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)]
9
Patricio Bravo

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.

0
Azharhussain Shaikh