Функция переноса слов UILabel, оставляя место, даже если для слова достаточно места - PullRequest
0 голосов
/ 03 июля 2019

Проблема возникает даже в раскадровке.

UILabel обладает следующими свойствами:

  • numberOfLines = 0
  • lineBreakMode =.byWordWrapping
  • Ограничения: ведущие и конечные 26 баллов к суперпредставлению;вертикально по центру.
  • Пользовательский шрифт: средний 17 точек.

Как видите, четвертое слово не может поместиться в первой строке и, следовательно, проблема заключается в создании неверного макета.Если я уберу последнее слово, предложение полностью уместится в одну строку или произнесет четвертое слово.При добавлении слова после него они перемещаются на следующую строку, что оставляет много места.Следует постараться вписать слова без разрывов или переносов как можно больше в одну строку.Но явно пустое пространство создается даже тогда, когда слово может поместиться.

Вы можете воссоздать это в новом проекте и наблюдать за проблемой.

enter image description here

1 Ответ

2 голосов
/ 03 июля 2019

Возможно, вы захотите попробовать ...

Подкласс UITextView, отключить прокрутку, редактирование и выбор ... установите textContainerInset = UIEdgeInsets.zero и textContainer.lineFragmentPadding = 0 в ноль.

Результат:

enter image description here

Код (@IBDesignable, чтобы мы могли видеть его в IB / Раскадровке):

@IBDesignable
class TextViewLabel: UITextView {

    override init(frame: CGRect, textContainer: NSTextContainer?) {
        super.init(frame: frame, textContainer: textContainer)
        commonInit()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        commonInit()
    }

    func commonInit() -> Void {
        isScrollEnabled = false
        isEditable = false
        isSelectable = false
        textContainerInset = UIEdgeInsets.zero
        textContainer.lineFragmentPadding = 0
    }

}
...