UILabel SizetoFit после указания количества строк?
Я хотел бы создать UILabel программно после указания количества строк. Я использую Swift. У меня есть следующий код:
let newLabel = UILabel()
newLabel.text = "Hello There"
newLabel.font = UIFont.systemFont(ofSize: 16)
newLabel.numberOfLines = 2
newLabel.lineBreakMode = .byWordWrapping
newLabel.sizeToFit()
newLabel.frame.origin.x = 100
newLabel.frame.origin.y = 500
view.addSubview(newLabel)
Проблема в том, что метка имеет текст в одну строку, а не две строки. Я должен использовать sizeToFit, потому что fontSize на самом деле динамический (он не всегда 16). Как я могу убедиться, что метка состоит из 2 строк? Благодарю.
2 ответа
Вы не указываете точный frame
вашей UILabel
. Так что ваш взгляд просто получит любую ширину, какую захочет. Вы можете использовать это для получения результата:
newLabel.frame = CGRect(x: 100, y: 500, width: newLabel.frame.width - 1, height: newLabel.frame.height * 2)
Но это не очень хорошо, и я предлагаю использовать AutoLayout
Есть много вещей, которые вы можете сделать, чтобы сломать линию. 1) Вы можете использовать "\n" между словами. Но не уверен насчет вашего варианта использования и имеет ли это смысл. 2) Мысль не рекомендуется, вы можете определить ширину этикетки. 3) Используйте numberOfLines = 0, если вы можете перейти более чем на 2 строки. Однако, если вы хотите только 2 строки, тогда укажите numberOfLines = 2.
Также используйте Constraints что-то вроде ниже, а не frame:
private let newLabel: UILabel = {
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.text = "Hello There"
label.font = UIFont.systemFont(ofSize: 16)
label.numberOfLines = 0
return label
}()
view.addSubview(newLabel)
NSLayoutConstraint.activate([
newLabel.topAnchor.constraint(equalTo: view.topAnchor, constant: 500),
newLabel.leadingAnchor.constraint(equalTo:view.leadingAnchor, constant: 100),
newLabel.widthAnchor.constraint(equalToConstant: 70)
])