IOS scrollview неоднозначная высота прокручиваемого содержимого в случае автоматического размещения

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

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

Так как решить эту проблему. Нужна помощь. Спасибо.

2 ответа

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

  1. UIScrollView меняет свои границы автоматически.
  2. UIScrollView необходим просмотр содержимого (в пользовательском интерфейсе) для получения размера содержимого для прокрутки, который работает плавно для автоматического макета.
  3. UIScrollViewВерхнее и нижнее ограничения должны быть связаны с верхним и нижним руководством по макету (в большинстве случаев не во всех).

Согласно вашей проблеме:

Первый подход: у вас есть UIScrollViewтак что просто вставьте один UIView внутри и рассматривать его как представление контента. После этого поставьте свои два UIViews внутри UIView (Просмотр содержимого).

Итак, Иерархия это: MainView -> UIScollView -> UIView (Content View) -> первый вид и второй вид. Теперь мы собираемся дать ограничения для всех них.

  • За UIScrollView, соедините ограничения TOP и BOTTOM с TOP & Bottom Guide Layout, а LEADING и TRAILING - с главным видом.
  • За UIView (Просмотр содержимого) очень важно дать ограничения LEADING, TRAILING, TOP, BOTTOM для UIScrollView и дать явную высоту (ограничение нормальной высоты) для вашего content View, которая подходит для прокрутки (например, 1200). Также сделайте его горизонтально в центре контейнера.
  • Теперь дайте ограничения вашему первому виду: LEADING, TRAILING, TOP to ContentView и дайте явную высоту (нормальное ограничение высоты). Не пытайтесь изменить его больше чем равный прямо сейчас - мы сделаем это позже. Затем задайте ограничение для второго вида: "Ведущий", "Трейлинг к Content View", "Сверху к FirstView", "Снизу к содержимому" и "Явная высота" (все, что вы хотите). Теперь попробуйте изменить ограничение Высота первого вида с равным -> большим, чем равным - оно определенно будет работать.

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

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

Если вы загружаете этот UIView из xib, просто убедитесь, что вы предоставили ограничение с более высоким приоритетом.

Другие вопросы по тегам