J'essaie d'ajouter deux étiquettes à l'endroit où le titre est affiché dans la barre de navigation, mais j'ai du mal à le faire. Ce serait très bien si je pouvais y arriver avec le storyboard mais comme je peux le voir, je ne peux pas le faire.
Comme je l'ai vu, j'ai besoin d'utiliser navigationItem mais je ne sais pas exactement comment faire cela. Si quelqu'un avait un exemple ou si quelqu'un pouvait m'expliquer plus précisément comment le faire, ce serait merveilleux.
Et je dois mentionner que je ne connais pas du tout Obj-C, donc toute aide devrait être dans Swift.
Je ne sais pas si vous pouvez le faire à partir du storyboard, mais si vous souhaitez ajouter deux étiquettes de titre, vous pouvez effectuer les opérations suivantes dans la méthode viewDidLoad()
du contrôleur de vue pour lequel vous souhaitez les deux titres:
if let navigationBar = self.navigationController?.navigationBar {
let firstFrame = CGRect(x: 0, y: 0, width: navigationBar.frame.width/2, height: navigationBar.frame.height)
let secondFrame = CGRect(x: navigationBar.frame.width/2, y: 0, width: navigationBar.frame.width/2, height: navigationBar.frame.height)
let firstLabel = UILabel(frame: firstFrame)
firstLabel.text = "First"
let secondLabel = UILabel(frame: secondFrame)
secondLabel.text = "Second"
navigationBar.addSubview(firstLabel)
navigationBar.addSubview(secondLabel)
}
De cette façon, vous pouvez ajouter autant de sous-vues que vous le souhaitez à la barre de navigation
Voici une implémentation qui utilise une vue de pile à la place, ce qui vous donne également une certaine polyvalence avec la disposition des étiquettes:
class ViewController: UIViewController {
lazy var titleStackView: UIStackView = {
let titleLabel = UILabel()
titleLabel.textAlignment = .center
titleLabel.text = "Title"
let subtitleLabel = UILabel()
subtitleLabel.textAlignment = .center
subtitleLabel.text = "Subtitle"
let stackView = UIStackView(arrangedSubviews: [titleLabel, subtitleLabel])
stackView.axis = .vertical
return stackView
}()
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.titleView = titleStackView
}
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
if view.traitCollection.horizontalSizeClass == .compact {
titleStackView.axis = .vertical
titleStackView.spacing = UIStackView.spacingUseDefault
} else {
titleStackView.axis = .horizontal
titleStackView.spacing = 20.0
}
}
}