Я потратил два дня на то, чтобы опробовать различные решения для подходов Mixed и Pure Autolayout, чтобы достичь того, что было тривиальной настройкой scrollview до autolayout, и теперь это официально - я, должно быть, слишком глуп. Я настраиваю это в основном в раскадровке (ну, это просто так).
Итак, вот моя просьба о помощи.
Viewtree:
UIView
-UIView
-UIView
..-UIScrollview
...-UIButton
...-UIButton
...-UIButton
Кнопки должны прокручиваться горизонтально (слева направо и наоборот). Может кто-нибудь, пожалуйста, дайте мне знать, как установить ограничения для достижения этого с помощью чистого Autolayout ???
-
Я попробовал смешанный подход, вот так:
UIView
- UIView
- UIView
..-UIScrollview
...-UIView (contentview)
....-UIButton
....-UIButton
....-UIButton
... и установка фиксированной ширины и высоты ограничения для contentview
и translatesAutoresizingMaskIntoConstraints
настройки как на TechNote Apple. Кнопки и вид прокрутки настраиваются с использованием ограничений. Это приводит к прокрутке прокрутки (yay), но, увы, она прокручивается слишком далеко! Насколько я могу судить, ширина прокрутки как-то удваивается по сравнению с тем, что я установил для contentview ??? !!! ???
Я также пробовал использовать метод чистого размещения, как с, так contentview
и без. Все мнения есть translatesAutoresizingMaskIntoConstraints=NO
, кроме self.view
. Кнопки имеют фиксированные ограничения ширины / высоты и прикреплены ко всем четырем краям прокрутки. Ничего не прокручивается.
Так что я совершенно сбит с толку, почему не могу заставить его работать правильно. Любая помощь очень ценится, и если вам нужна другая информация, пожалуйста, обращайтесь!
ОБНОВЛЕНИЕ Снимок экрана с решением - ограничения buttonZ:
РЕДАКТИРОВАТЬ @ Джейми Форрест Таким образом, решение оказывается неправильным конечным ограничением для последней кнопки. Вместо 6441 значение, которое я установил, было отрицательным, -6441. Сложность в том, что при установке значения в раскадровке на панели инструментов «Pin» есть два параметра:
Текущее значение холста является отрицательным (приводит к отсутствию прокрутки), а параметр ниже является положительным (активация прокрутки). Это значит, что я не глупый, но, по крайней мере, полуслепой, наверное. Хотя, на мой взгляд, не беспокоит ли то, что XCode не показывает ошибку при «неправильной» настройке?
ВНОВЬ ИЗМЕНЕНО Теперь это забавно ... изменение конечного значения с -6441 (без прокрутки) на 6441 с прокруткой. Но мой старый друг, «слишком большой размер содержимого» вернулся, что привело к тому, что размер содержимого в два раза больше, чем должен быть! Чтобы получить правильную прокрутку содержимого, нужно было установить конечное ограничение на ZERO! Это неочевидно при работе в Storyboard, но, глядя на код @Infinity James, оно так и должно быть.
contentSize
из UIScrollView
использования только автоматической компоновки. И именно contentSize
это определяет, сколько вы можете прокрутить. Таким образом, вам придется установить это где-то вручную в конце концов. В остальном вы можете использовать ограничения макета для настройки рамок вида относительно друг друга.