Swift 5, Xcode 10.2
Я хочу отобразить 2 строки текста в UINavigationBar
, поэтому я использую UILabel
:
@IBOutlet weak var navigationBar: UINavigationItem!
override func viewDidLoad() {
let labeltext = NSMutableAttributedString.init(string: "Text in line 1\n(Line 2)")
labeltext.setAttributes([NSAttributedString.Key.font: UIFont.systemFont(ofSize: 14)],range: NSRange(location: labeltext.length-8, length: 8))
let label = UILabel()
label.backgroundColor = .clear
label.numberOfLines = 2
label.font = UIFont.boldSystemFont(ofSize: 17.0)
label.textAlignment = .center
label.textColor = .black
label.attributedText = labeltext
navigationBar.titleView = label
}
В портретной ориентацииориентация выглядит следующим образом:
На небольших устройствах текст обрезается в альбомной ориентации (это нормально на iPhone Xs Max и iPad):
Я пытался расширить UINavigationBar
, как предлагалось здесь :
extension UINavigationBar {
open override func sizeThatFits(_ size: CGSize) -> CGSize {
let portraitSize = CGSize(width: UIScreen.main.bounds.width, height: 44)
return portraitSize
}
}
... но не сделалНичего не меняйте, и print("Navigationbar height: \(navigationController!.navigationBar.frame.height)")
всегда печатает «44», независимо от его ориентации и используемого устройства (даже на iPhone X).
Добавление наблюдателя в соответствии с предложением здесь также не помогло.
Как исправить это, чтобы отображать 2 строки кода, не ломая его для более крупных устройств / устройств с меткой?