Swift — UIScrollView не прокручивается
мой UIScrollView не будет прокручиваться вниз. Не знаю почему. Я уже следил за документацией apple по этому вопросу.
пожалуйста, советом. Спасибо.
7 ответов
вам нужно установить размер вашего UIScrollView так, чтобы он был меньше contentsize. Иначе он не будет прокручиваться.
также я бы рекомендовал добавить scroller.contentSize = CGSizeMake(400, 2300) на viewDidLoad метод.
Swift 3.0 версия
много времени код корректен, если вы следовали учебнику, но многие новички не знают, что scrollView не будет прокручиваться нормально через симулятор. Предполагается прокручивать только тогда, когда вы нажимаете на коврик мыши и одновременно прокручиваете. Многие опытные пользователи XCode/Swift/Obj-C так привыкли делать это, и поэтому они не знают, как это может быть упущено новичками. ЧАО 🙂
этот код будет работать отлично, как пока ты делаешь то, что я сказал наверху!—2—>
Если вы используете autolayout, то свойство contentSize перестает работать, и оно попытается вывести размер содержимого из ограничений. Если это так, то ваша проблема может заключаться в том, что вы не определяете необходимые ограничения для представления содержимого, чтобы scrollview мог определить размер содержимого. Вы должны определить ограничения вашего представления содержимого для верхнего и нижнего краев scrollview.
Я не знаю, что это хорошее решение, но вы можете попытаться установить headerview в пустой UITableView.
представление может не двигаться вниз по двум причинам, так как ваш код идеально звучит.
- Первая причина, вы не видите индикатор прокрутки
- вторая причина, нет ничего в представлении для отображения
вторая причина недостаточно сказать, что ваш вид не прокрутки, но если вы не видите индикатор прокрутки, то вы можете поверить, что вид не прокручивается, когда это на самом деле делает.
первая причина, по которой я вижу, происходит когда ограничения не установлены в раскадровке, особенно если размер контроллера вида в раскадровке установлен в «Any». Вид прокрутки будет шире, чем экран имитируемого или реального устройства, и, таким образом, индикатор прокрутки будет находиться вне видимого экрана.
У меня были проблемы с этим, и я не мог найти ответ для меня, пока я не понял это. У меня был вид прокрутки внутри обычного вида, и как только Я заменил » вид » на «вид прокрутки», он прокрутился нормально. Просто если кто-нибудь наткнется на это.
Я не уверен, что это означало, чтобы остановить его от работы, поскольку я очень неопытен, но, похоже, это мое решение. Надеюсь, это кому-то поможет.
Источник
Swift — UIScrollView не прокрутка
Мой UIScrollView не будет прокручиваться вниз. Я не знаю, почему. Я уже обращался к документации Apple по этой проблеме.
Прошу совета. Спасибо.
Если вы используете автозапуск, свойство contentSize перестает работать, и оно попытается вывести размер содержимого из ограничений. Если это так, то ваша проблема может заключаться в том, что вы не определяете необходимые ограничения для представления содержимого, чтобы scrollview мог вывести размер содержимого.
Вы должны определить ограничения своего содержимого на верхний и нижний края прокрутки.
Вам нужно установить frame вашего UIScrollView так, чтобы он был меньше, чем contentsize . В противном случае, он не будет прокручиваться.
Кроме того, я бы рекомендовал вам добавить scroller.contentSize = CGSizeMake(400, 2300) в ваш метод viewDidLoad .
В то же время код правильный, если вы следовали учебному курсу, но то, что многие новички не знают, — это то, что scrollView НЕ будет нормально прокручиваться через симулятор. Предполагается прокручивать только при нажатии на коврик мыши и одновременной прокрутке. Многие опытные пользователи XCode/Swift/Obj-C настолько полезны для этого, и поэтому они не знают, как это можно упустить новичками. Ciao: -)
Этот код будет работать отлично, если вы делаете то, что я сказал выше
версия Swift 3.0
Если вы используете AutoLayout,
Установите размер содержимого в viewdidAppear, который работает для меня.
переопределить функцию viewDidAppear (_ animated: Bool) <
Я не знаю, что это хорошее решение, но вы можете попробовать установить headerview для пустого UITableView.
Не задавайте фиксированную высоту для представления прокрутки и всегда задавайте верхнюю часть первого подпредставления для просмотра прокрутки и нижнюю часть последнего подпредставления для просмотра прокрутки. Таким образом, представление прокрутки будет автоматически увеличиваться в соответствии с размером вложенных подпредставлений. Нет необходимости указывать contentSize для scrollview. Он будет работать как для маленьких, так и для больших iPhone.
Проблема может заключаться в том, что ваш scrollView не знает свой contentSize, как указано выше, но исправить это проще, чем приведенные выше ответы. Как сказал Карлос, но я уточню подробнее. Если вы хотите, чтобы ваш scrollView выполнял вертикальную прокрутку (вверх и вниз), сделайте ваш contentView, который находится в иерархии scrollView, равным ширине ViewController и присвойте ему ограничение по высоте, которое работает для вашего проекта, т.е. 700. Для противоположного (по горизонтали) сделайте высоту равной ViewController, а ширину — большим числом, которое подходит для вашего проекта.
В моем случае я использовал UIStackView внутри UIScrollView.
Добавлены некоторые view-элементы из кода в stackview. Это не будет прокручивать.
Исправлено это путем установки в стеке userInteractionEnabled false .
У меня были проблемы с этим, и я не мог найти ответ для меня, пока не разработал его. У меня был вид прокрутки внутри обычного вида, и как только я заменил «вид» на «прокрутку», он прокручивался отлично. Просто заставляйте кого-то спотыкаться над этим.
Я не уверен, что это означало остановить его от работы, поскольку я очень неопытен, но это, казалось, было моим решением. Надеюсь, это поможет кому-то.
Похоже, что представление не может опуститься по двум причинам, так как ваш код отлично звучит.
- Во-первых, вы не видите индикатор прокрутки
Вторая причина: нет ничего в представлении для отображения
Вторая причина недостаточна, чтобы сказать, что ваше представление не прокручивается, но если вы не видите индикатор прокрутки, вы можете поверить, что представление не прокручивается, когда оно на самом деле делает.
Первая причина, по которой я вижу происходящее, когда ограничения не установлены в раскадровке, особенно если размер диспетчера представлений в раскадровке установлен на «Любой». Прокрутка будет более широкой, чем экран симулированного или реального устройства, и, таким образом, индикатор прокрутки будет находиться за пределами видимого экрана.
Источник
UIScrollView не прокручивается
У меня есть a, UIScrollView который содержит много UIImageView s, UILabels и т.д . метки намного длиннее UIScrollView , но когда я запускаю приложение, я не могу щелкнуть и прокрутить вниз .
Почему это могло быть?
Всегда полезно показать полный рабочий фрагмент кода:
Swift 4.0
Я не нашел способа установить contentSize в IB (начиная с Xcode 5.0) .
Примечание. Если вы используете Autolayout, лучше всего разместить этот код внутри -(void)viewDidLayoutSubviews метода.
Если вы не можете прокрутить вид даже после того, как вы установили contentSize правильно, убедитесь , что вы снимите «Использовать AutoLayout» в Interface Builder -> File Inspector.
Вам необходимо установить contentSize свойство представления прокрутки, чтобы оно правильно прокручивалось.
Если вы используете autolayout, вам необходимо установить contentSize в viewDidLayoutSubviews для того , чтобы применять его после autolayout завершается.
Код может выглядеть так:
Ответ правильный — для прокрутки необходимо установить размер содержимого.
Если вы используете построитель интерфейсов, то простой способ сделать это — использовать атрибуты времени выполнения, определенные пользователем. Например:
Попробуйте увеличить размер контента до огромных чисел. Я не мог понять, почему мое представление прокрутки не прокручивается, даже если размер его содержимого кажется больше, чем размер элемента управления. Я обнаружил, что если размер содержимого меньше необходимого, он также не работает.
Вместо 2000 вы можете поставить свои большие числа. И если это работает, это означает, что размер вашего контента недостаточно велик при изменении размера.
Для работы режима прокрутки делегат не требуется.
Убедитесь, что для свойства contentSize представления прокрутки установлен правильный размер (т. Е. Достаточно большой, чтобы вместить весь ваш контент).
Снимите флажок «Использовать автопрокладку» для меня.
Среда: xCode 5.0.2 Раскадровки ios7
В моем случае мне пришлось установить delaysContentTouches значение true, потому что все объекты внутри scrollView захватывали события касания и обрабатывали сами себя, а не позволяли самому scrollView обрабатывать их.
Установить contentSize свойство UIScrollview в ViewDidLayoutSubviews методе. Что-то вроде этого
Идея о том, почему представление прокрутки не прокручивается, потому что вы устанавливаете размер содержимого для прокрутки меньше, чем размер представления прокрутки, что неверно. Вы должны установить размер содержимого больше, чем размер вашей прокрутки, чтобы перемещаться по нему во время прокрутки.
Та же самая идея с масштабированием, вы устанавливаете минимальное и максимальное значение для масштабирования, которое будет применяться через действие масштабирования.
Одно небольшое дополнение, все вышеперечисленное — это фактические причины, по которым ваше представление прокрутки может не прокручиваться, но иногда бездумно это может быть причиной, особенно когда scrollview добавляется через код, а не IB, вы могли добавить свои подпредставления в родительский вид, а не в scrollview это заставляет subview не прокручиваться
и держите размер содержимого установленным и больше, чем родительский фрейм представления (даааа !!)
Я заставил это работать с первой попытки. С автоматическим макетом и всем остальным, без дополнительного кода. Затем представление коллекции превратилось в банан, вылетело во время выполнения, я не смог найти, что было не так, поэтому я удалил и воссоздал его (я использую Xcode 10 Beta 4. Это было похоже на ошибку), а затем прокрутка исчезла. Однако представление «Коллекция» снова заработало!
Много часов спустя .. вот что исправило для меня. У меня была такая раскладка:
UIView
- Безопасный район
- Прокрутка
- Просмотр содержимого
Все дело в ограничениях. Безопасная зона определяется системой автоматически. В худшем случае удалите все ограничения для прокрутки и просмотра содержимого и не позволяйте IB сбрасывать / создавать их за вас. Сделайте их вручную, все работает.
- Для прокрутки я сделал: Выровняйте трейлинг / верх по безопасной области. Равная ширина / высота для безопасной зоны .
- Для представления содержимого я сделал: Выровнять Trailing / Leading / Top / Bottom по Superview (представление прокрутки)
в основном концепция заключается в том, чтобы представление содержимого соответствовало Scrollview, что соответствует безопасной области.
Но как таковой это не сработало. Просмотр содержимого пропустил высоту. Я пробовал все, что мог, и единственное, что помогало, — это созданная с помощью элемента управления высота представления содержимого и перетаскивание представления содержимого… на себя . Это определило фиксированную высоту, значение которой было вычислено из размера контроллера представления (определенного как произвольная форма, длиннее, чем реальный дисплей, чтобы содержать все мои подпредставления), и, наконец, это снова сработало!
Источник
UIScrollView не прокручивается в Swift
Мой UIScrollView не прокручивается вниз. Не знаю почему. Я уже следил за документацией Apple по этому вопросу.
12 ответов
Вам необходимо установить frame вашего UIScrollView так, чтобы оно было меньше contentsize . В противном случае прокрутка не будет.
Кроме того, я бы рекомендовал вам добавить scroller.contentSize = CGSizeMake(400, 2300) в свой метод viewDidLoad .
Я не знаю, что это хорошее решение, но вы можете попробовать установить для headerview пустой UITableView.
Если вы используете Storyboard :
- Поместите представление содержимого в UIScrollView
- Добавьте ограничения top , bottom , left и right с помощью прокрутки
- Добавьте одинаковые ограничения heights и widths
- Для вертикальной прокрутки установите приоритет Equal Heights Constraint на 250 . Для горизонтальной прокрутки установите приоритет Equal Widths Constraint на 250
FWIW, я обнаружил, что мне нужно использовать сатишское решение сверху, хотя его было недостаточно, чтобы произвести вмешательство только в viewDidAppear . Вместо этого мне пришлось вносить корректировки для каждого нового назначения контента:
Константы манифеста (да, я знаю, yuk, но это упрощает понимание здесь) взяты из спецификации autolayout.
У меня это сработало. В компоновке инспектора размеров = переводит маску в ограничения. Автоизменение размеров = все щелчки
В моем случае я использовал UIStackView внутри UIScrollView.
Добавлены некоторые элементы-представления из кода в стек. Он не прокручивается.
Исправлено, установив для stackview userInteractionEnabled значение false .
Проблема может заключаться в том, что ваш scrollView не знает своего contentSize, как указано выше, но исправить это проще, чем то, что указано выше. Как сказал Карлос, но я уточню подробнее. Если вы хотите, чтобы ваш scrollView прокручивался вертикально (вверх и вниз), сделайте свой contentView, который находится в иерархии scrollView, равной ширине ViewController и задайте ему ограничение высоты, которое работает для вашего проекта, т.е. 700. Для противоположного (по горизонтали) сделайте высоту равной ViewController, а ширину — большим числом, которое подходит для вашего проекта.
Если вы используете автоматическое размещение, свойство contentSize перестает работать и пытается определить размер содержимого на основе ограничений. Если это так, то ваша проблема может заключаться в том, что вы не определяете необходимые ограничения для представления содержимого, чтобы средство scrollview могло сделать вывод о размере содержимого. Вы должны определить ограничения вашего представления содержимого для верхнего и нижнего краев прокрутки.
Не задавайте фиксированную высоту для просмотра прокрутки и всегда отдавайте верх первого подпредставления для прокрутки и нижнюю часть последнего подпредставления для прокрутки. Таким образом, вид прокрутки будет автоматически увеличиваться в соответствии с размером содержащихся подвидов. Не нужно указывать contentSize для scrollview — он будет работать как для маленьких, так и для больших iPhone.
Источник