Nano Hash - криптовалюты, майнинг, программирование

Заставить UIView с нулевой высотой размещать свои подвиды

У меня есть UIView с некоторыми ярлыками. Метки имеют динамическую высоту в зависимости от текста, и они имеют вертикальные ограничения интервала между родительским видом и друг с другом, задавая родительскому виду его высоту. Ограничение между нижней частью последней метки и нижней частью родительского представления имеет более низкий приоритет.

введите здесь описание изображения

Кроме того, родительское представление имеет ограничение по высоте, которое я установил на 0 в viewDidLoad. Это сворачивает представление и сдвигает все метки вниз, поскольку последнее нижнее ограничение имеет более низкий приоритет. Затем у меня есть кнопка, с помощью которой я переключаю ограничение высоты родительского представления, которое открывает/закрывает его:

@IBAction func viewInfoButtonTapped(_ sender: Any) {
    viewInfoButton.isSelected = !viewInfoButton.isSelected
    
    self.infoHeightConstraint.isActive = !self.viewInfoButton.isSelected
    UIView.animate(withDuration: 0.25) {
        self.view.layoutIfNeeded()
    }
}

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

Как я могу заставить представление правильно размещать ограничения, прежде чем оно будет расширено в первый раз? Я пытался вызвать setNeedsLayout() и layoutIfNeeded(), но, похоже, это не дало результата.

20.03.2021

Ответы:


1

Установите Вертикальный Content Compression Resistance приоритет на Required (1000) для каждого из ваших ярлыков:

введите здесь описание изображения

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

label.text = someString
label.setContentCompressionResistancePriority(.required, for: .vertical)

Это должно исправить начальное растяжение, которое вам не нужно.

Если вы все еще видите растяжение (не должно, но на всякий случай), вы также можете вызвать sizeToFit():

label.text = someString
label.setContentCompressionResistancePriority(.required, for: .vertical)
label.sizeToFit()
20.03.2021
  • Настройка сопротивления сжатию исправила это, спасибо! 21.03.2021
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..