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)
   ]) 
Другие вопросы по тегам