我正在使用导航控制器,我设置为真正的导航栏的prefersLargeTitle
属性。一切都很好,但是当我的标题文字变得太大时,它就不适合空间。在这里看起来如何:
是否有可能以某种方式使标题(当导航栏的prefersLargeTitle
属性设置为true)动态调整其字体大小,如果是这样,如何实现?
这个问题在这里有所回答: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。希望这可以帮助。
这是我找到的解决方法
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)
]
}
}
可能以某种方式使用这个?
它仅在Interface Builder中有效。但是你可以在运行时使用它。
自动收缩
确定标签是否在进行截断之前调整文本的外观。选择“最小字体比例”并输入一个值,以允许标签缩小字体大小以适合文本。启用“紧固字母间距”以允许标签减少字符间距。分别在运行时使用
minimumScaleFactor
和allowsDefaultTighteningForTruncation
属性访问这些值。请注意,iOS 6中不推荐使用“最小字体大小”选项。