UILabel Text Not Wrapping

Я работаю над проектом Swift со Storyboards, где я хочу, чтобы текст был обернут этикеткой. В старой версии Objective-C, где я не использовал раскадровку, я использовал следующие настройки, и все работало отлично.

Objective-C without Storyboard Settings

Вот настройки для Swift

Swift with Storyboard Settings

Я читал о потенциальных проблемах с макетом с предпочтительными настройками ширины. В настоящее время у меня они настроены на автоматический макет, а сам ярлык имеет ширину 560. Я добавил ограничение, чтобы сохранить метку 20 пикселей от трейлинг-супервизора, и, хотя я думал, что это сработает, я до сих пор не могу получить текст заворачивать. Настройки размера ниже.

Label Dimension and Constraints

Может ли кто-нибудь объяснить, как получить текст для обертывания?

Ответ 1

Во-первых, хорошие новости: вы установили ярлык в 2 строки и Word Wrap. Так что это можно обернуть. Отлично.

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

Наконец, вы должны ограничить его ширину. Вот почему текст обертывается. Если вы не ограничите ширину ярлыка, он просто будет расти вправо, потенциально продолжая с экрана. Предел в ширине метки останавливает этот рост вправо и заставляет текст обертываться (а ярлык растет вниз).

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

Ответ 2

Объявляйте свой UILabel программно и дайте

yourUILabel.contentMode = .scaleToFill
yourUILabel.numberOfLines = 0

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

Ответ 3

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

Ответ 4

Исправлена проблема с заменой типа метки на "Placeholder" под Intrinsic Size в IB. Когда я изменил это, текст был завернут, и предупреждения исчезли.

Ответ 5

В случае, если это кому-то помогает: я следил за рекомендациями, приведенными здесь, чтобы зафиксировать мой ярлык, не перенося на две строки, но ничего не получилось. Что сработало для меня, я сначала удалил некоторые из соответствующих ограничений в раскадровке (я использую автомат) и увидел, что этикетка завершена правильно. Я медленно добавлял ограничения, которые мне нужны, и все, кажется, работает нормально. Таким образом, удаление и изменение ваших ограничений может помочь.