Проблема, с которой я сталкиваюсь, заключается в том, что 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
, чтобы предотвратить разрыв строки в таком случае?Или есть другое элегантное решение?
Текущий результат:
Желаемый результат (получается с использованием label.numberOfLines = 1
):
Обратите внимание, что мне все еще нужно включить 2 строки, чтобы красиво отображать, например, label.text = "Three words fit"
.