Intereting Posts

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

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

Проблема в том, что когда одна из ярлыков пуста, тогда между двумя другими надписями над и под пустым (30 пикселей) есть дополнительное пространство.

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

Есть ли способ удалить дополнительный вертикальный интервал, когда один из меток пуст, не удаляя его?

Изменить 1: метки не имеют ограничений по высоте, поэтому пустой будет иметь высоту 0 пикселей

Изменить 2: Мне нужно поддерживать iOS7 +

Solutions Collecting From Web of "Автовыброс вертикального расстояния группы текстовых меток, когда один пуст"

Возможные варианты:

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

  • добавьте выход к каждому из ваших ограничений и отрегулируйте константу на основе ярлыка с текстом или нет

Есть немало других, в том числе использование табличных представлений, представлений стека (iOS 9+) и, возможно, больше …

введите описание изображения здесь Если вы согласны с поддержкой iOS 9 и выше, вы можете использовать представление стека и задать ограничения для меток в представлении стека. Но вместо того, чтобы опорожнять этикетку, вы должны скрыть ярлык. Когда ярлык скрыт, просмотр стека автоматически отображает все метки ниже него. Используя этот метод, вы должны получить желаемое поведение.

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

Несколько вариантов:

A – Вы можете модифицировать ограничения в viewWillLayoutSubviews – это бесполезно, чтобы удержать столько верхних ограничений. Несколько менее беспорядочно, если вы добавите их в коллекцию выходных данных (в основном, из массивов).

B – Вы можете вручную настроить кадры в viewDidLayoutSubviews – хотя в этом случае возникает вопрос, почему даже использовать AutoLayout вообще, если вы делаете почти все работы вручную в любом случае.

C – Используйте SnapKit и создавайте эти ограничения в viewDidLoad и / или обновляйте их всякий раз, когда изменяется текст. Я настоятельно рекомендую SnapKit. Подумайте об этом как о разумном способе программного создания ограничений AutoLayout. Это очень чисто и очень просто.

См. http://snapkit.io