UILabel 和 UITextView 换行符不匹配
UILabel and UITextView line breaks don't match
我有一个 UILabel 和一个 UITextView,我的目的是让它们显示相同的文本,并且外观相同。我现在有一些问题。我已经在 Swift 游乐场进行了演示:
import UIKit
import PlaygroundSupport
class MyViewController : UIViewController {
override func loadView() {
let view = UIView()
view.backgroundColor = .white
let label = UILabel()
label.frame = CGRect(x: 100, y: 100, width: 247, height: 39)
label.numberOfLines = 0
label.font = UIFont.systemFont(ofSize: 16)
label.text = "I’m on my way back to London today"
label.textColor = .black
label.backgroundColor = .red
label.lineBreakMode = .byWordWrapping
view.addSubview(label)
let textView = UITextView()
textView.frame = CGRect(x: 100, y: 200, width: 247, height: 39)
textView.font = label.font
textView.text = label.text
textView.textColor = label.textColor
textView.backgroundColor = label.backgroundColor
textView.textContainer.lineBreakMode = label.lineBreakMode
textView.textContainerInset = UIEdgeInsets.zero
textView.textContainer.lineFragmentPadding = 0
view.addSubview(textView)
self.view = view
}
}
// Present the view controller in the Live View window
PlaygroundPage.current.liveView = MyViewController()
如您所见,它们的设置方式相同,但换行符出现在 UITextView 的不同位置。我已将两者的 lineBreakMode
设置为相同的值。我还删除了 UITextView 上的 textContainerInsets
和 lineFragmentPadding
,因此文本在两个视图中使用相同的填充定位。
这是对 IOS 11 中 UILabel
的更改,以修复孤立的单词。尽管我希望有,但无法关闭它。唯一的方法是使用非 editable/nonscrollable 文本视图或 CATextLayer
。要获得 UILabel
的大小属性,恐怕您必须手动执行此操作。
参见 this,因为问题很相似。尽管不在那个答案中,但我确实发现 UITextView
以旧方式包装。我现在用的是 UITextView
,我手动调整 textDidChange
中的字体大小。我保留原始字体,所以我可以随时调整大小。
我有一个 UILabel 和一个 UITextView,我的目的是让它们显示相同的文本,并且外观相同。我现在有一些问题。我已经在 Swift 游乐场进行了演示:
import UIKit
import PlaygroundSupport
class MyViewController : UIViewController {
override func loadView() {
let view = UIView()
view.backgroundColor = .white
let label = UILabel()
label.frame = CGRect(x: 100, y: 100, width: 247, height: 39)
label.numberOfLines = 0
label.font = UIFont.systemFont(ofSize: 16)
label.text = "I’m on my way back to London today"
label.textColor = .black
label.backgroundColor = .red
label.lineBreakMode = .byWordWrapping
view.addSubview(label)
let textView = UITextView()
textView.frame = CGRect(x: 100, y: 200, width: 247, height: 39)
textView.font = label.font
textView.text = label.text
textView.textColor = label.textColor
textView.backgroundColor = label.backgroundColor
textView.textContainer.lineBreakMode = label.lineBreakMode
textView.textContainerInset = UIEdgeInsets.zero
textView.textContainer.lineFragmentPadding = 0
view.addSubview(textView)
self.view = view
}
}
// Present the view controller in the Live View window
PlaygroundPage.current.liveView = MyViewController()
如您所见,它们的设置方式相同,但换行符出现在 UITextView 的不同位置。我已将两者的 lineBreakMode
设置为相同的值。我还删除了 UITextView 上的 textContainerInsets
和 lineFragmentPadding
,因此文本在两个视图中使用相同的填充定位。
这是对 IOS 11 中 UILabel
的更改,以修复孤立的单词。尽管我希望有,但无法关闭它。唯一的方法是使用非 editable/nonscrollable 文本视图或 CATextLayer
。要获得 UILabel
的大小属性,恐怕您必须手动执行此操作。
参见 this,因为问题很相似。尽管不在那个答案中,但我确实发现 UITextView
以旧方式包装。我现在用的是 UITextView
,我手动调整 textDidChange
中的字体大小。我保留原始字体,所以我可以随时调整大小。