iOS 11中导航栏大标题需要多行显示

17

在iOS 11的导航栏中,是否有可能显示多行的大型标题?App Store应用可以做到这一点,但我在当前文档中找不到任何相关信息。标准行为只会在标题过长时显示省略号。

输入图像描述


你有没有得到任何解决方案? - Jigar Thakkar
如果有帮助的话,这是我在另一个线程中所做的:https://dev59.com/6aXja4cB1Zd3GeqPSH9o#50647001 - Bejil
2个回答

5

在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()

遇到后退按钮问题,将很快更新。


后退按钮问题有任何更新吗?我只能在viewdidappear中使其工作,这仅适用于视图可见之后,因此看起来很卡顿。 - Coltuxumab
2
也许你可以在分配计数的地方使用break。 - tryKuldeepTanwar
4
这不起作用,标签变成了多行,但导航栏没有增加高度。@Rahul_Chandnani - Shahzaib Qureshi
同意@ShahzaibQureshi - Ankur Lahiry

1

有一种简单的方法可以使用非公开API来实现。请自行承担风险:

class ViewController: UIViewController {

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

}

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

结果: 在这里输入图像描述

私有API可能导致不可预测的结果,如崩溃和审核拒绝。 - Gargo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接