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

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

在此处输入图像描述

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

这个问题在这里有所回答: 如何动态调整导航栏中的标题 。

 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中有效。 但是你可以在运行时使用它。

自动收缩

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

来源链接