我的导航栏大标题太宽了。如何解决?

问题描述 投票:5回答:3

我正在使用导航控制器,我设置为真正的导航栏的prefersLargeTitle属性。一切都很好,但是当我的标题文字变得太大时,它就不适合空间。在这里看起来如何:

enter image description here

是否有可能以某种方式使标题(当导航栏的prefersLargeTitle属性设置为true)动态调整其字体大小,如果是这样,如何实现?

ios swift uinavigationbar navigationcontroller
3个回答
2
投票

这个问题在这里有所回答:How to resize Title in a navigation bar dynamically

self.title = "Your TiTle Text"
let tlabel = UILabel(frame: CGRectMake(0, 0, 200, 40))
tlabel.text = self.title
tlabel.textColor = UIColor.whiteColor()
tlabel.font = UIFont(name: "Helvetica-Bold", size: 30.0)
tlabel.backgroundColor = UIColor.clearColor()
tlabel.adjustsFontSizeToFitWidth = true
self.navigationItem.titleView = tlabel

话虽如此,这有点不同,因为你有prefersLargeTitle属性设置。现在,我不确定tlabel.adjustsFontSizeToFitWidth = true是否会覆盖prefersLargeTitle属性,但是试试看它是否有效。此处还有一些关于导航项目大型标题的其他信息:https://developer.apple.com/documentation/uikit/uinavigationitem/2909056-largetitledisplaymode。希望这可以帮助。


12
投票

这是我找到的解决方法

override func viewDidLoad() {
  super.viewDidLoad()

  title = yourTitle
  adjustLargeTitleSize()
}

extension UIViewController {
  func adjustLargeTitleSize() {
    guard let title = title, #available(iOS 11.0, *) else { return }

    let maxWidth = UIScreen.main.bounds.size.width - 60
    var fontSize = UIFont.preferredFont(forTextStyle: .largeTitle).pointSize
    var width = title.size(withAttributes: [NSAttributedStringKey.font: UIFont.systemFont(ofSize: fontSize)]).width

    while width > maxWidth {
      fontSize -= 1
      width = title.size(withAttributes: [NSAttributedStringKey.font: UIFont.systemFont(ofSize: fontSize)]).width
    }

    navigationController?.navigationBar.largeTitleTextAttributes =
        [NSAttributedStringKey.font: UIFont.boldSystemFont(ofSize: fontSize)
    ]
  }
}

0
投票

可能以某种方式使用这个?

enter image description here

它仅在Interface Builder中有效。但是你可以在运行时使用它。

自动收缩

确定标签是否在进行截断之前调整文本的外观。选择“最小字体比例”并输入一个值,以允许标签缩小字体大小以适合文本。启用“紧固字母间距”以允许标签减少字符间距。分别在运行时使用minimumScaleFactorallowsDefaultTighteningForTruncation属性访问这些值。请注意,iOS 6中不推荐使用“最小字体大小”选项。

source link

© www.soinside.com 2019 - 2024. All rights reserved.