2017-02-01 13 views
0

Кажется, что это было бы интуитивно, но я пытался получить текст, чтобы перестать выходить на экран в течение 45 минут. Вот мой viewDidLoad():Многострочная метка с переносом слов

override func viewDidLoad() { 
    super.viewDidLoad() 
    orgTitle.numberOfLines = 0 
    orgTitle.lineBreakMode = .byWordWrapping 
    orgTitle.frame.size.width = self.view.frame.size.width - 20 
    orgTitle.sizeToFit() 

    orgDesc.numberOfLines = 0 
    orgDesc.lineBreakMode = .byWordWrapping 
    orgDesc.frame.size.width = self.view.frame.size.width - 20 
    orgDesc.sizeToFit() 

    self.orgTitle.text = self.oTitle 
    self.orgDesc.text = self.desc 
    self.orgImage.image = self.image 
} 

Я приложил скриншот выпуска, а также настройки для моего лейбла. Label Settings Screenshot of issue

+2

Используйте свой отладчик. Посмотрите размер рамки в 'viewDidLoad'. Слишком рано полагаться на фрейм. – rmaddy

+0

Я не думаю, что все. Это было мое последнее дополнение, и это ничего не изменило. С тех пор я удалил его, и ничего не изменилось. –

ответ

2

Я считаю, это намного проще в использовании ограничений для установки макета, а не ручной регулировки рамы ...

Но если по какой-либо причине, вы хотите, чтобы вручную установить рамки этикетки Я хотел бы предложить две вещи:

  1. как как @rmaddy упоминает, viewDidLoad слишком рано в жизненном цикле контроллера представления для кадра, чтобы быть правильным. Попробуйте переопределить layoutSubviews и переместить корректировку кадра в этот метод.

  2. Для UILabel с номеромOfLines, установленным в 0, вы также захотите установить свойство preferredmaxlayoutwidth, чтобы помочь выяснить, сколько строк оно должно быть (не требуется при использовании ограничений).

Кроме того, если вы готовы к целевой iOS9 и выше, UIStackView действительно хорошее дополнение к UIKit, чтобы помочь с такого рода макете подвиды получить толкаемом вниз от возможного увеличения высоты многострочных этикеток.

Вот некоторые экранные захваты добавления вида стека, чтобы держать 2 UILabels, а затем ограничения, PIN-коду stackview в левом, верхнем и правые краях к надтаблице:

enter image description here

С макетом, определенным в ваш раскадровки, ваш viewDidLoad станет намного проще, просто установив фактическое содержимое для этикеток:

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.orgTitle.text = self.oTitle 
    self.orgDesc.text = self.desc 
    self.orgImage.image = self.image 
} 
+0

Я бы предпочел не устанавливать рамку, это именно то, что я пробовал совсем недавно. Как мне это сделать иначе? –

+0

@EthanKlein обновил ответ с некоторыми экранами добавления стека и ограничений в вашем раскадровке. – MathewS

+0

Я закончил настройку своего представления в стеке, спасибо за невероятно подробное руководство, кстати, и мне просто интересно, нужно ли мне теперь вернуться и изменить номер строки/строки «Разбить настройки моих меток»? –