2016-09-19 3 views
2

Я хочу создать метку программно, которая способна переносить слова для длинных предложений. Вот петля, которую я создал для создания меток:iOS: Создайте метку программно с помощью Word Wrap

 for i in 0..<servicesLength 
    { 
     let label = UILabel(frame: CGRectMake(0, number, servicesScroll.bounds.size.width - 42, 25)) 
     label.lineBreakMode = .ByWordWrapping 
     label.numberOfLines = 0 
     label.font = UIFont(name: label.font.fontName, size: 25) 
     label.text = servicesList[i] 
     self.servicesScroll.addSubview(label) 
     number = number + 50 

    } 

Это не работает. Из того, что я прочитал, для того, чтобы обертка работала, вам нужно либо не устанавливать высоту, либо сделать высоту достаточно большой для содержимого. Я должен установить высоту для фрейма, и я не хочу делать его чрезвычайно большим для больших предложений, так как я могу заставить это работать, установив все программно?

+0

Таким образом, у меня есть работа, за исключением того, что, похоже, это отбрасывает вещи, регулируя высоту метки. Он нажимает все ярлыки на ту же величину, что и я, меняю высоту на. Это вызывает много белого пространства наверху, а некоторые ярлыки - в нижней части прокрутки. Что я могу сделать, чтобы исправить это? – user1715916

ответ

0

Вместо этого я решил использовать TableView. Это дало мне именно то, что я искал. Если вам нужен список показанных предложений и требуется перенос слов для возможно больших предложений или абзацев, табличное представление намного проще, чем возиться с добавлением меток программно. Вот шаги, которые я затем:

  1. Следуйте this учебник о том, как сделать TableView в Swift.
  2. Добавить функцию cell.textLabel?.numberOfLines = 0 в функцию, которая создает ячейки, чтобы получить перенос слов.
  3. Добавить yourtableview.estimatedRowHeight = whateveryouwant yourtableview.rowHeight = UITableViewAutomaticDimension в ваш viewDidLoad, чтобы получить переменную высоту для ваших строк.
2

Почему бы не использовать Autolayout, это также позволит вам поддерживать изменение ориентации на устройствах.

var lastLabel:UILabel? 

    for i in 0..<10servicesLength 
    { 
     let label = UILabel() 
     label.translatesAutoresizingMaskIntoConstraints=false 
     label.lineBreakMode = .ByWordWrapping 
     label.numberOfLines = 10 
     label.font = UIFont(name: label.font.fontName, size: 25) 
     label.text = servicesList[i] 
     servicesScroll.addSubview(label) 

     let metrics=["horizontalMargin":21,"top":0,"bottom":0,"separationBetweenLabels":0,"labelMinHeight":25] 
     let views=["label":label] 

     servicesScroll.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-horizontalMargin-[label]-horizontalMargin-|", 
      options: NSLayoutFormatOptions(rawValue: 0), 
      metrics: metrics, 
      views: views)) 

     if i == 0{ 
      servicesScroll.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-top-[label]", 
       options: NSLayoutFormatOptions(rawValue: 0), 
       metrics: metrics, 
       views: views)) 
     } 
     if let lastLabel=lastLabel{ 
      views["lastLabel"]=lastLabel 
      servicesScroll.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:[lastLabel]-separationBetweenLabels-[label]", 
       options: NSLayoutFormatOptions(rawValue: 0), 
       metrics: metrics, 
       views: views)) 
     } 
     if i == (servicesLength-1){ 
      servicesScroll.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:[label]-bottom-|", 
       options: NSLayoutFormatOptions(rawValue: 0), 
       metrics: metrics, 
       views: views)) 
     } 

     //Optional a minimum height of 25 
     servicesScroll.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:[label(>=labelMinHeight)]", 
      options: NSLayoutFormatOptions(rawValue: 0), 
      metrics: metrics, 
      views: views)) 

     lastLabel=label 
    } 

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

Также я добавить ограничение на высоту нагрузки минимума:

//Optional a minimum height of 25 
    servicesScroll.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:[label(25)]", 
     options: NSLayoutFormatOptions(rawValue: 0), 
     metrics: metrics, 
     views: views)) 

Это будет гарантировать, что этикетка будет по меньшей мере 25 и высота не более 10 строк в этом примере.

+0

Спасибо за сообщение. Я не хотел поддерживать горизонтальную ориентацию, потому что приложение выглядело бы неплохо в ландшафте. Я пытался избежать жесткого кодирования в ситуации максимальной высоты. Я надеялся, что я могу просто заставить его обернуть линии, пока они не закончатся. У меня есть несколько строк, которые относятся к абзацу долго, а другие - просто к предложению. Я попробовал свой код и пропустил что-то, что говорит, где начальная точка начала метки, поэтому все они расположены друг на друге. – user1715916

+0

Итак, я попытался увеличить высоту и пространство между метками, которые позволяли им отображаться, но я получаю много свободного места наверху перед первым ярлыком. Пространство кажется равным высоте, которую я установил для ярлыков. Все выглядит отлично, за исключением куска пространства. Как мне избавиться от этого? – user1715916

+0

Извините, в моем коде были ошибки, я обновил его. Пожалуйста, проверьте его снова, и у вас не должно быть проблем с пространством вверху. – omarzl

 Смежные вопросы

  • Нет связанных вопросов^_^