UILabel和UITextView换行符不匹配

时间:2017-12-29 20:23:42

标签: ios uilabel uitextview

我有一个UILabel和一个UITextView,我的目的是让他们显示相同的文本,并且外观是相同的。我现在遇到了一些问题。我在斯威夫特游乐场举办了一场演示:

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()

enter image description here

正如您所看到的,它们都以相同的方式设置,但换行符发生在UITextView的不同位置。我已将lineBreakMode设置为两者的相同值。我还删除了UITextView上的textContainerInsetslineFragmentPadding,因此文本在两个视图中的位置都相同。

1 个答案:

答案 0 :(得分:4)

IOS 11中的UILabel修改了孤立的单词。虽然我希望有,但没办法把它关掉。唯一的方法是使用不可编辑/不可滚动的textview或CATextLayer。要获得UILabel的大小调整属性,我担心您必须手动执行此操作。

请参阅this,因为问题类似。虽然不是那个答案,但我确实发现UITextView包含了旧的方式。我现在正在使用UITextView,我手动调整textDidChange中的字体大小。我持有原始字体,所以我总是可以调整大小。