Mise à jour: J'ai fini par cacher la barre de navigation par défaut et ajouté un UIView qui ressemble à la barre de navigation. Cela peut ne pas sembler bon mais au lieu de patcher dans le UINavigationBar
c'est bon.Comment augmenter la hauteur pour une classe personnalisée UINavigationBar dans Swift
C'est ma classe personnalisée UINavigationBar
que j'ai créé pour augmenter la hauteur de la barre de navigation dans mon application. Ça ne marche pas pour moi. Voici le code.
class PPBaseNavigationBar: UINavigationBar {
///The height you want your navigation bar to be of
static let navigationBarHeight: CGFloat = 83.0
///The difference between new height and default height
static let heightIncrease: CGFloat = navigationBarHeight - 44
override init(frame: CGRect) {
super.init(frame: frame)
initialize()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
initialize()
}
private func initialize() {
let shift = PPBaseNavigationBar.heightIncrease/2.0
///Transform all view to shift upward for [shift] point
self.transform = CGAffineTransform(translationX: 0, y: -shift)
}
override func layoutSubviews() {
super.layoutSubviews()
let shift = PPBaseNavigationBar.heightIncrease/2.0
///Move the background down for [shift] point
var classNamesToReposition: Array<String>?
if #available(iOS 10.0, *) {
classNamesToReposition = ["_UIBarBackground"]
} else {
classNamesToReposition = ["_UINavigationBarBackground"]
}
for view: UIView in self.subviews {
if (classNamesToReposition?.contains(NSStringFromClass(view.classForCoder)))! {
let bounds: CGRect = self.bounds
var frame: CGRect = view.frame
frame.origin.y = bounds.origin.y + shift - 20.0
frame.size.height = bounds.size.height + 20.0
view.frame = frame
}
}
}
override func sizeThatFits(_ size: CGSize) -> CGSize {
let amendedSize:CGSize = super.sizeThatFits(size)
let newSize:CGSize = CGSize.init(width: amendedSize.width, height: PPBaseNavigationBar.navigationBarHeight)
return newSize;
}
}
Toute la méthode est appelée, sauf override func sizeThatFits(_ size: CGSize) -> CGSize {...}
ne sais pas, pourquoi?
Avez-vous essayé d'ajouter une barre de navigation par programme? –
Créer une référence de contrôleur de navigation, puis initez-la nouvelle référence sur NavBar .. Vous pouvez init navbar avec l'image –
Salut Malav, merci pour la réponse bro. J'ai essayé les deux dans UIStoryboard et par programme mais n'a pas aidé. J'ai juste ajouté un 'UIView' en remplaçant la barre de navigation par défaut. C'est une bonne solution pour mon application. – Hemang