【问题标题】:UILabel and UITextView line breaks don't matchUILabel 和 UITextView 换行符不匹配
【发布时间】:2017-12-29 20:23:41
【问题描述】:

我有一个 UILabel 和一个 UITextView,我的目的是让它们都显示相同的文本,并且外观相同。我现在有一些问题。我已经在 Swift Playground 中进行了演示:

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 上的 textContainerInsetslineFragmentPadding,因此文本在两个视图中使用相同的填充定位。

【问题讨论】:

  • 确实很尴尬。这在设备上表现如何?
  • @meaning-matters 完全相同

标签: ios uilabel uitextview


【解决方案1】:

在 IOS 11 中对 UILabel 进行了更改,以修复孤立词。没有办法关闭它,虽然我希望有。唯一的方法是使用不可编辑/不可滚动的文本视图或CATextLayer。要获得UILabel 的大小属性,恐怕您必须手动执行此操作。

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

【讨论】:

  • 哇,很好的答案。您能否详细说明一下这个孤立词的问题?
  • 我不是类型/字体专家,但在设计中,将单个单词单独放在一行上被认为是不可取的。因此,Apple 更改了 iOS UILabel 以拉下多余的单词以使其更加均匀。我遇到的问题是字符串大小调整、核心文本方法或其他任何东西都不能帮助解决它的工作原理。可能发生的事情的一个例子是github.com/StockX/EvenlyWrappedLabel。我只是希望有一种方法可以禁用它,或者对我来说核心文本方法至少能够告诉我哪些文本被移动了。祝你好运。
  • 感谢您的精彩解释。我认为这是 Apple 的错误选择!
  • 确实是一个糟糕的选择,甚至没有让开发人员选择禁用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-24
  • 2015-09-04
  • 1970-01-01
  • 2019-09-22
  • 1970-01-01
相关资源
最近更新 更多