Как заставить перенос слов UILabel, который регулирует размер шрифта и является многострочным - PullRequest
0 голосов
/ 20 июня 2019

Проблема, с которой я сталкиваюсь, заключается в том, что UILabel будет прерывать строку в середине слова, хотя я использую перенос слов.

Вы можете создать новый проект и заменить содержимое контроллера представления, чтобы увидетьрезультат:

override func viewDidLoad() {
    super.viewDidLoad()

    let label = UILabel(frame: CGRect(x: 0.0, y: 0.0, width: 100.0, height: 100.0))
    label.center = CGPoint(x: view.frame.midX, y: view.bounds.midY)
    label.numberOfLines = 2 // Setting this to 1 produces expected result
    label.lineBreakMode = .byWordWrapping
    label.adjustsFontSizeToFitWidth = true
    label.minimumScaleFactor = 0.5
    view.addSubview(label)

    label.text = "Singlewordtext"
    label.backgroundColor = .red
}

Это дает 2 строки текста, которые разбиты в середине слова.Причина, по которой это происходит естественным образом, заключается в том, что само слово шире, чем сам ярлык, поэтому оно имеет смысл (я полагаю).Но я надеюсь, что он будет использовать adjustsFontSizeToFitWidth и minimumScaleFactor до его взлома.Если я установлю его в одну строку (label.numberOfLines = 1), я получу ожидаемый результат, который будет заключаться в том, что текст будет сокращаться, а не прерываться.Обратите внимание, что при этом в этом случае будет помещаться весь текст внутри метки.

Вопрос в том, есть ли конфигурация на UILabel, чтобы предотвратить разрыв строки в таком случае?Или есть другое элегантное решение?

Текущий результат:

Current result

Желаемый результат (получается с использованием label.numberOfLines = 1):

Desired result

Обратите внимание, что мне все еще нужно включить 2 строки, чтобы красиво отображать, например, label.text = "Three words fit".

Expected result with 2 lines

...