Несколько строк для больших заголовков в панелях навигации в iOS 11

Возможно ли, чтобы новые большие заголовки для панелей навигации в iOS 11 показывали несколько строк? Приложение App Store делает это, но я не могу найти ничего в текущей документации, чтобы сделать это. Стандартное поведение показывает только одну строку с многоточием, если оно слишком длинное.

2 ответа

Добавьте следующий код в viewWillAppear:

    navigationController?.navigationBar.prefersLargeTitles = true
    self.navigationController?.navigationItem.largeTitleDisplayMode = .automatic

    self.title = "Hello big text, For navigation large style bar"
    navigationController?.navigationBar.largeTitleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.black, NSAttributedStringKey.font : UIFont.preferredFont(forTextStyle: .largeTitle)]

    var count = 0
    for item in(self.navigationController?.navigationBar.subviews)! {
        for sub in item.subviews{
            if sub is UILabel{
                if count == 1 {
                    break;
                }
                let titleLab :UILabel = sub as! UILabel
                titleLab.numberOfLines = 0
                titleLab.text = self.title
                titleLab.lineBreakMode = .byWordWrapping
                count = count + 1
            }
        }

    }
    self.navigationController?.navigationBar.layoutSubviews()
    self.navigationController?.navigationBar.layoutIfNeeded()

Возникшая проблема с кнопкой возврата скоро обновится..

Есть способ сделать это, просто используя непубличный API. Используйте на свой риск:

      class ViewController: UIViewController {

   override func viewDidLoad() {
      super.viewDidLoad()
      title = "Thunderbox Entertaiment"
      navigationItem.enableMultilineTitle()
   }

}
      extension UINavigationItem {
   
   func enableMultilineTitle() {
      setValue(true, forKey: "__largeTitleTwoLineMode")
   }
   
}

Результат:

Другие вопросы по тегам