У меня есть a, UIScrollView
который содержит много UIImageView
s, UILabels и т.д ... метки намного длиннее UIScrollView
, но когда я запускаю приложение, я не могу щелкнуть и прокрутить вниз ...
Почему это могло быть?
Спасибо
ios
iphone
ipad
uiscrollview
отметка
источник
источник
Ответы:
Всегда полезно показать полный рабочий фрагмент кода:
Swift 4.0
Я не нашел способа установить contentSize в IB (начиная с Xcode 5.0) .
Примечание. Если вы используете Autolayout, лучше всего разместить этот код внутри
-(void)viewDidLayoutSubviews
метода.источник
myScrollView.delegate = self
ТАКЖЕ, если это все еще не работает, ответ ниже содержит ОТЛИЧНЫЙ совет (перейдите на свой xib / StoryBoard и убедитесь, что «AutoLayout» отключен). Подсказка: вы также можете включить его<UIScrollViewDelegate>
в свой .h файл, если хотите делать такие вещи, как программная прокрутка UIScrollView.viewDidLayoutSubviews
заставил меня работать.Если вы не можете прокрутить вид даже после того, как вы установили contentSize правильно, убедитесь , что вы снимите «Использовать AutoLayout» в Interface Builder -> File Inspector.
источник
Вам необходимо установить
contentSize
свойство представления прокрутки, чтобы оно правильно прокручивалось.Если вы используете autolayout, вам необходимо установить
contentSize
вviewDidLayoutSubviews
для того , чтобы применять его после autolayout завершается.Код может выглядеть так:
источник
contentSize
на размерcontentView
, размер scrollView и contentView, кажется, устанавливается одинаковым. Но установив для высотыcontentSize
значение больше, чем высотаcontentView
, это сработало.viewDidLayoutSubviews
может вызываться несколько раз в течение жизненного цикла, поэтому вы рискуете увеличить высоту больше, чем ожидалось.Ответ правильный - для прокрутки необходимо установить размер содержимого.
Если вы используете построитель интерфейсов, то простой способ сделать это - использовать атрибуты времени выполнения, определенные пользователем. Например:
источник
Попробуйте увеличить размер контента до огромных чисел. Я не мог понять, почему мое представление прокрутки не прокручивается, даже если размер его содержимого кажется больше, чем размер элемента управления. Я обнаружил, что если размер содержимого меньше необходимого, он также не работает.
Вместо 2000 вы можете поставить свои большие числа. И если это работает, это означает, что размер вашего контента недостаточно велик при изменении размера.
Для работы режима прокрутки делегат не требуется.
источник
Убедитесь, что для свойства contentSize представления прокрутки установлен правильный размер (т. Е. Достаточно большой, чтобы вместить весь ваш контент).
источник
Снимите флажок "Использовать автопрокладку" для меня.
Среда: xCode 5.0.2 Раскадровки ios7
источник
В моем случае мне пришлось установить
delaysContentTouches
значение true, потому что все объекты внутри scrollView захватывали события касания и обрабатывали сами себя, а не позволяли самому scrollView обрабатывать их.источник
Установить
contentSize
свойствоUIScrollview
вViewDidLayoutSubviews
методе. Что-то вроде этогоисточник
Идея о том, почему представление прокрутки не прокручивается, потому что вы устанавливаете размер содержимого для прокрутки меньше, чем размер представления прокрутки, что неверно. Вы должны установить размер содержимого больше, чем размер вашей прокрутки, чтобы перемещаться по нему во время прокрутки.
Та же самая идея с масштабированием, вы устанавливаете минимальное и максимальное значение для масштабирования, которое будет применяться через действие масштабирования.
добро пожаловать :)
источник
Одно небольшое дополнение, все вышеперечисленное - это фактические причины, по которым ваше представление прокрутки может не прокручиваться, но иногда бездумно это может быть причиной, особенно когда scrollview добавляется через код, а не IB, вы могли добавить свои подпредставления в родительский вид, а не в scrollview это заставляет subview не прокручиваться
и держите размер содержимого установленным и больше, чем родительский фрейм представления (даааа !!)
источник
Я заставил это работать с первой попытки. С автоматическим макетом и всем остальным, без дополнительного кода. Затем представление коллекции превратилось в банан, вылетело во время выполнения, я не смог найти, что было не так, поэтому я удалил и воссоздал его (я использую Xcode 10 Beta 4. Это было похоже на ошибку), а затем прокрутка исчезла. Однако представление «Коллекция» снова заработало!
Много часов спустя .. вот что исправило для меня. У меня была такая раскладка:
UIView
Все дело в ограничениях. Безопасная зона определяется системой автоматически. В худшем случае удалите все ограничения для прокрутки и просмотра содержимого и не позволяйте IB сбрасывать / создавать их за вас. Сделайте их вручную, все работает.
в основном концепция заключается в том, чтобы представление содержимого соответствовало Scrollview, что соответствует безопасной области.
Но как таковой это не сработало. Просмотр содержимого пропустил высоту. Я пробовал все, что мог, и единственное, что помогало, - это созданная с помощью элемента управления высота представления содержимого и перетаскивание представления содержимого… на себя . Это определило фиксированную высоту, значение которой было вычислено из размера контроллера представления (определенного как произвольная форма, длиннее, чем реальный дисплей, чтобы содержать все мои подпредставления), и, наконец, это снова сработало!
источник
если вы получаете сообщение (IOS8 / swift),
viewDidLayoutSubviews
которого не существует, используйте вместо этого следующееЭто исправило это для меня
источник
То, о чем раньше не упоминалось!
Убедитесь, что ваша розетка правильно подключена к scrollView! На нем должен быть закрашенный круг, но даже если вы закрасили круг, scrollView может не быть подключен - так что дважды проверьте! Наведите указатель мыши на кружок и посмотрите, выделится ли фактическая прокрутка! (Это был случай для меня)
источник
В большинстве случаев код верен, если вы следовали руководству, но многие новички не знают, что scrollView НЕ будет нормально прокручивать симулятор. Предполагается, что прокрутка выполняется только тогда, когда вы нажимаете на коврик для мыши и одновременно прокручиваете. Многие опытные пользователи XCode / Swift / Obj-C так привыкли к этому, что не знают, как это могло быть упущено новичками. Чао :-)
Этот код будет работать отлично, пока вы будете делать то, что я сказал выше.
источник
Если ни одно из других решений не работает для вас, дважды проверьте, действительно ли ваше представление прокрутки
UIScrollView
в Interface Builder.В какой-то момент за последние несколько дней мой
UIScrollView
тип спонтанно изменился на aUIView
, хотя его класс сказалUIScrollView
в инспекторе. я используюXcode 5.1 (5B130a)
.Вы можете создать новое представление прокрутки и скопировать измерения, настройки и ограничения из старого представления, либо вы можете вручную изменить вид на a
UIScrollView
вxib
файле. Я провел сравнение и обнаружил следующие отличия:Оригинал:
После спонтанной смены типа:
Поэтому я заменил
<view>
строку своей оригинальной<scrollView>
строкой.Я также заменил закрывающий тег представления
</view>
на</scrollView>
.Убедитесь, что id такой же, как у текущего представления, в этом случае: id = "qRn-TP-cXd".
Мне также пришлось очистить xib из кеша Xcode, удалив производные данные приложения:
Xcode->Window->Organizer->Projects
, выберите свой проект, в строке "Производные данные" нажмите Удалить ...Или при использовании устройства:
Xcode->Window->Organizer->Device
, выберите свое устройство-> Приложения, выберите приложение, нажмите (-)Теперь очистите проект и удалите приложение с симулятора / устройства:
Xcode->Product->Clean
Simulator/device->press
и удерживайтеapp->click
(X), чтобы удалить его.После этого вы сможете создавать и запускать свое приложение, а также снова пользоваться функцией прокрутки.
PS Мне не нужно было устанавливать размер содержимого прокрутки
viewDidLayoutSubviews
или отключать автоматическую компоновку, но YMMV.источник
Если ваше
scrollView
представлениеcontainerView
некоторого типа, убедитесь, что оноscrollView
находится в пределах фрейма или границcontainerView
. У меня было то,containerView.clipsToBounds = NO
что все еще позволяло мне видеть scrollView, но поскольку оноscrollView
не было в границах,containerView
оно не обнаруживало сенсорных событий.Например:
Вы сможете увидеть scrollView, но он не получит взаимодействия с пользователем.
источник
добавление следующего кода
viewDidLayoutSubviews
сработало для меня с Autolayout. Перепробовав все ответы:источник
Добавьте
UIScrollViewDelegate
и добавив следующий код вviewDidAppear
метод, исправивший это для меня.источник
Моя проблема была решена:
Как только я удалил верхние и / или нижние ограничения, привязанные к безопасной области и / или супервизору, представления внутри scrollView могли снова прокручиваться и не оставались фиксированными в верхней или нижней части экрана!
Надеюсь, это избавит кого-то от многих часов боли с этой конкретной проблемой.
источник
еще один забавный случай:
scrollview.superview.userInteractionEnabled должно быть истинным
Я потратил 2+ часа на погоню за этим, чтобы понять, что родительский элемент - это UIImageView, который, естественно, имеет userInteractionEnabled == false
источник
После того, как я потерпел неудачу с предоставленными ответами в этой теме, я наткнулся на эту статью с решением.
Есть две вещи, которые не интуитивно понятны при настройке режима прокрутки с автоматическим размещением:
В этом суть статьи. Полное объяснение, включая иллюстрации, можно найти здесь.
источник
Я обнаружил, что с этой проблемой AutoLayout ... если я просто
ViewController
используюUIView
вместоUIScrollView
класса ... тогда просто добавляюUIScrollView
себя ... что он работает.источник
У меня была такая же проблема в IB.
После установки ведущего, замыкающего, верхнего и нижнего края scrollView на его superView. Я внес следующие изменения, чтобы сделать containerView прокручиваемым, и это сработало.
Чтобы scrollView прокручивалась только в горизонтальном направлении, сделайте ограничение с помощью scrollView centerY = ContainerView centerY
и чтобы сделать его вертикально прокручиваемым, сделайте scrollView centerX = ContainerView centerX
источник