gpt4 book ai didi

ios - UINavigationBar 中的 UILabel 在横向中被切断

转载 作者:行者123 更新时间:2023-11-29 05:38:47 25 4
gpt4 key购买 nike

Swift 5、Xcode 10.2

我想在 UINavigationBar 中显示 2 行文本,这就是我使用 UILabel 的原因:

@IBOutlet weak var navigationBar: UINavigationItem!

override func viewDidLoad() {
let labeltext = NSMutableAttributedString.init(string: "Text in line 1\n(Line 2)")
labeltext.setAttributes([NSAttributedString.Key.font: UIFont.systemFont(ofSize: 14)],range: NSRange(location: labeltext.length-8, length: 8))
let label = UILabel()
label.backgroundColor = .clear
label.numberOfLines = 2
label.font = UIFont.boldSystemFont(ofSize: 17.0)
label.textAlignment = .center
label.textColor = .black
label.attributedText = labeltext
navigationBar.titleView = label
}

纵向显示如下:

enter image description here

在较小的设备上,横向文本会被截断(在 iPhone Xs Max 和 iPad 上没问题):

enter image description here

我尝试按照建议扩展 UINavigationBar here :

extension UINavigationBar {
open override func sizeThatFits(_ size: CGSize) -> CGSize {
let portraitSize = CGSize(width: UIScreen.main.bounds.width, height: 44)
return portraitSize
}
}

...但没有更改任何内容,并且 print("Navigationbar height:\(navigationController!.navigationBar.frame.height)") 始终打印“44”,无论方向如何它是什么以及我使用什么设备(甚至在 iPhone X 上)。

按照建议添加观察者 here也没有帮助。

如何修复此问题以显示 2 行代码,同时又不会在更大的设备/带有缺口的设备上破坏它?

最佳答案

我没有找到一种方法使 UINavigationBar 显示两行文本或增加其高度(我在问题中发布的扩展没有执行任何操作)。相反,我现在使用此代码根据设备和设备方向更改标签:

override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()

if (UIDevice.current.orientation == .landscapeLeft || UIDevice.current.orientation == .landscapeRight) && UIDevice.current.userInterfaceIdiom == .phone {
//1 line: iPhone & horizontal (the NavigationBar on iPads is tall enought to display 2 lines!)
navigationBar.titleView = labelLandscape!
} else {
//2 lines: Vertical (device doesn't matter)
navigationBar.titleView = labelPortrait!
}
}

标签示例:

//let labelTextPortrait = NSMutableAttributedString.init(string: "Text in line 1\n(Line 2)")
let labelTextLandscape = NSMutableAttributedString.init(string: "Text in line 1 (Line 2)")
labelTextLandscape.setAttributes([NSAttributedString.Key.font: UIFont.systemFont(ofSize: 14)],range: NSRange(location: labeltextQuer.length-8, length: 8))
//Text size of "(Line 2)" is 8, the remaining text uses 14

var labelLandscape = UILabel()
labelLandscape!.backgroundColor = .clear
labelLandscape!.numberOfLines = 1 //labelPortrait!.numberOfLines = 2
labelLandscape!.font = UIFont.boldSystemFont(ofSize: 17.0)
labelLandscape!.textAlignment = .center
labelLandscape!.textColor = .black
labelLandscape!.attributedText = labelTextLandscape
labelLandscape!.lineBreakMode = .byWordWrapping //important, so it doesn't truncate mid-text!

关于ios - UINavigationBar 中的 UILabel 在横向中被切断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56774752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com