ios - 如何在导航栏中设置多行大标题? ( iOS 11 的新功能)

标签 ios swift uilabel uinavigationbar large-title

我正在其中一个应用程序的导航栏中添加大标题。问题是标题有点长,所以我需要在大标题中添加两行。如何在导航栏中添加两行大标题

这与默认导航栏标题无关!这是关于 iOS 11 中引入的大标题。因此,请确保通过考虑大标题来添加建议。谢谢

Title text truncated with 3 dots in the navigation bar

最佳答案

基于@krunal 的回答,这对我有用:

extension UIViewController {

func setupNavigationMultilineTitle() {
    guard let navigationBar = self.navigationController?.navigationBar else { return }
    for sview in navigationBar.subviews {
        for ssview in sview.subviews {
            guard let label = ssview as? UILabel else { break }
            if label.text == self.title {
                label.numberOfLines = 0
                label.lineBreakMode = .byWordWrapping
                label.sizeToFit()
                UIView.animate(withDuration: 0.3, animations: {
                    navigationBar.frame.size.height = 57 + label.frame.height
                })
            }
        }
    }
}

在 UIViewController 中:

override func viewDidLoad() {
    super.viewDidLoad()
    self.title = "This is a multiline title"
    setupNavigationMultilineTitle()
}

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    setupNavigationMultilineTitle()
}

以及在大标题上设置字体和颜色:

navigation.navigationBar.largeTitleTextAttributes = [NSAttributedStringKey.foregroundColor: .red, NSAttributedStringKey.font: UIFont.boldSystemFont(ofSize: 30)]

关于ios - 如何在导航栏中设置多行大标题? ( iOS 11 的新功能),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47901318/

相关文章:

ios - 如何在 Swift 3 中将 NSConstraints 添加到 UITextView

ios - Swift 4 : UITableViewCell does will not display data upon initial load, 但会在第二次加载时加载

ios - 确定 UILabel 中有多少个字符已被截断

objective-c - 如果值 = <null>,则无法删除文本显示

ios - UIStoryBoard 自动布局在 UIScrollView 中嵌入 UIStackView

iphone - 从核心数据存储创建 .sqlite 文件?

swift - 我的 Swift 代码出现错误无法形成上限 < 下限的范围

ios - 如何在不违反 AutoLayout 约束的情况下隐藏 UITableViewCells

ios - iOS 6.0 版不推荐使用最小字体大小

ios - 了解 Swift 映射语法