UILabel в UINavigationBar обрезается в ландшафте - PullRequest
0 голосов
/ 26 июня 2019

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
}

В портретной ориентацииориентация выглядит следующим образом:

enter image description here

На небольших устройствах текст обрезается в альбомной ориентации (это нормально на iPhone Xs Max и iPad):

enter image description here

Я пытался расширить 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 строки кода, не ломая его для более крупных устройств / устройств с меткой?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...