UILabel SizetoFit после указания количества строк? - PullRequest
0 голосов
/ 08 декабря 2018

Я хотел бы создать 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 ]

0 голосов
/ 08 декабря 2018

Есть много вещей, которые вы можете сделать, чтобы разорвать линию.1) Вы можете использовать «\ n» между словами.Но не уверен насчет вашего варианта использования и имеет ли это смысл.2) Мысль не рекомендуется, вы можете определить ширину этикетки.3) Используйте numberOfLines = 0, если вы можете перейти более чем на 2 строки.Однако, если вы хотите только 2 строки, тогда укажите numberOfLines = 2.

Также используйте ограничения, как показано ниже, а не фрейм:

 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)
   ]) 
0 голосов
/ 08 декабря 2018

Вы не указываете точное frame вашего UILabel. Так что ваше представление просто получает любую ширину, которую оно хочет. Вы можете использовать это для получения результата:

newLabel.frame = CGRect(x: 100, y: 500, width: newLabel.frame.width - 1, height: newLabel.frame.height * 2)

Но это не очень хорошо иЯ предлагаю использовать AutoLayout

...