2016-11-16 13 views
0

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

Вот что он выглядит, когда у меня есть текст на одной строке, отображая правильно:

enter image description here

Когда текст занимает несколько строк, однако это происходит:

enter image description here

Вот настройки компоновщика интерфейса, которые я использую:

enter image description here

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

ответ

0

Текстовый вид немного сложный для обработки с автоматическим расположением. Если возможно, используйте UILabel. Если нет, то есть несколько проблем с текстовым представлением, и наиболее управляемым решением является добавление ограничения высоты, которое затем обрабатывается в коде.

Высота содержания просмотра текста может быть определен как:

let height = textView.sizeThatFits(textView.frame.size).height 

Также можно использовать

let height = textView.contentSize.height 

Но результаты иногда неправильно.

Вам необходимо установить делегат для текстового вида, чтобы при изменении вы обновили размер текстового вида.

+0

Что мне делать с этим размером, если у меня есть? Установка нового кадра в UILabel ничего не делает. – spacitron

+0

Извините, это предназначалось для UITextView. Ваша проблема должна быть где-то в другом месте. Что касается использования этого, вам нужен выход для ограничения высоты текстового вида и его константа для значения полученной высоты. –

0

Ну, вы дали разрешение на это, основываясь на ваших ограничениях. Любая высота> 0, если она равна 20 с верхнего края. Так как у вас нет каких-либо других взглядов на базу вашей высоты прочь вы можете подключить выход к наклейке и использовать это:

@IBOutlet weak var label: UILabel! 

override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(animated) 
    label.sizeToFit() 
} 
+0

Ярлык уже делает это сам по себе. Он имеет приоритет обхода контента, который по умолчанию должен быть установлен в 251. Это означает, что если ограничение не ограничено, чтобы ограничить размер, оно будет уменьшаться настолько, насколько позволяет его контент (текст). Проблема заключается в использовании текстового вида. –

+0

Я установил ограничения, как в своем примере, и запустил этот код. Это исправляет проблему. Кроме того, ОП задает вопрос о UILabel, а не UITextView. – Frankie

+0

Это не решило проблему для меня. Ни вызывать sizeToFit(), ни настройку фрейма метки программно. – spacitron

0
  1. снимите флажок «Preferred Width» Явный флажок (В) Размер Inspector
  2. Удалить ограничение по высоте на UILabel.

Это определенно сработает.

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