UILabel和UITextView换行符不匹配

And*_*rew 3 uitextview uilabel ios

我有一个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()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

如您所见,它们的设置方式相同,但是换行符发生在UITextView的不同位置。我已将lineBreakMode两者的值设为相同。我还删除了UITextView上的textContainerInsetslineFragmentPadding,因此在两个视图中使用相同的填充来定位文本。

agi*_*007 5

这是对iOS 11中的UILabel的更改,用于修复孤立的单词。尽管希望存在,但无法关闭它。唯一的方法是使用不可编辑/不可滚动的textview或CATextLayer。恐怕要获取UILabel的大小设置属性,您必须手动执行。

视为相似的问题。尽管没有找到答案,但我确实发现UITextView包装了旧方法。我现在正在使用UITextView,并在textDidChange中手动调整字体大小。我拥有原始字体,因此可以随时调整大小。

  • 我不是一个类型/字体的人,但在设计中,在一行中单独使用一个单词被认为是不可取的。所以苹果改变了 iOS UILabel 来拉下多余的词,让它更均匀。我遇到的问题是,字符串大小调整、核心文本方法或其他任何方法都无法帮助解决它的工作原理。可能发生的事情的一个例子是 https://github.com/StockX/EvenlyWrappedLabel。我只是希望有一种方法可以禁用它,或者对我来说,核心文本方法至少能够告诉我哪些文本被移动了。祝你好运。 (2认同)
  • 谢谢你的好解释。我认为这是苹果的一个糟糕选择! (2认同)