具有从右到左文本和自动调整字体大小的多行 UILabel
Multiline UILabel with right-to-left text and auto adjusted font size
下面是 Swift 中的代码,我用于 2 行 UILabel,adjustsFontSizeToFitWidth
设置为 true
,适用于从左到右的文本。我使用 EasyPeasy 库来设置布局约束。
let contactLabel = UILabel()
contactLabel.text = "Tell us how we can contact you".localized()
contactView.addSubview(contactLabel)
contactLabel.easy.layout([Leading(), Trailing(), Top(20), Height(60)])
contactLabel.numberOfLines = 2
contactLabel.lineBreakMode = .byTruncatingHead
contactLabel.adjustsFontSizeToFitWidth = true
当我将语言更改为阿拉伯语时,文本将正确地分成两行,但以 LTR 模式而不是 RTL 模式显示。应如何管理多行标签以显示阿拉伯文本?
我还在 iOS 11 上检查了这个行为,它正在工作,也许在 iOS 12 上有一个技巧。
不要设置特定的高度,因为它不会扩展到您的文本量。
步骤 1 - 设置 顶部、前导、尾随和高度约束 并将高度关系更改为大于或等于
第 2 步 - label.numberOfLines = 0
第 3 步 - label.sizeToFit()
第 4 步 - label.lineBreakMode = .byTruncatingTail
虽然将标签对齐方式设置为 "natural" 在大多数情况下都有效,但 iOS 有时会出错。如果您没有想法,您可以随时根据应用程序的当前布局方向在代码中手动设置它。
if UIApplication.shared.userInterfaceLayoutDirection == .leftToRight {
resultLabel.textAlignment = .left
} else {
resultLabel.textAlignment = .right
}
下面是 Swift 中的代码,我用于 2 行 UILabel,adjustsFontSizeToFitWidth
设置为 true
,适用于从左到右的文本。我使用 EasyPeasy 库来设置布局约束。
let contactLabel = UILabel()
contactLabel.text = "Tell us how we can contact you".localized()
contactView.addSubview(contactLabel)
contactLabel.easy.layout([Leading(), Trailing(), Top(20), Height(60)])
contactLabel.numberOfLines = 2
contactLabel.lineBreakMode = .byTruncatingHead
contactLabel.adjustsFontSizeToFitWidth = true
当我将语言更改为阿拉伯语时,文本将正确地分成两行,但以 LTR 模式而不是 RTL 模式显示。应如何管理多行标签以显示阿拉伯文本?
我还在 iOS 11 上检查了这个行为,它正在工作,也许在 iOS 12 上有一个技巧。
步骤 1 - 设置 顶部、前导、尾随和高度约束 并将高度关系更改为大于或等于
第 2 步 - label.numberOfLines = 0
第 3 步 - label.sizeToFit()
第 4 步 - label.lineBreakMode = .byTruncatingTail
虽然将标签对齐方式设置为 "natural" 在大多数情况下都有效,但 iOS 有时会出错。如果您没有想法,您可以随时根据应用程序的当前布局方向在代码中手动设置它。
if UIApplication.shared.userInterfaceLayoutDirection == .leftToRight {
resultLabel.textAlignment = .left
} else {
resultLabel.textAlignment = .right
}