UIScrollView не прокручивается - PullRequest
121 голосов
/ 13 мая 2010

У меня есть UIScrollView, который содержит много UIImageView s, UILabels и т. Д ... метки намного длиннее, чем UIScrollView, но когда я запускаю приложение, я не могу нажать и прокрутить вниз ...

Почему это может быть?

Спасибо

Ответы [ 24 ]

160 голосов
/ 14 мая 2010

Всегда хорошо показать полный рабочий фрагмент кода:

// in viewDidLoad (if using Autolayout check note below):

UIScrollView *myScrollView;
UIView *contentView;
// scrollview won't scroll unless content size explicitly set

[myScrollView addSubview:contentView];//if the contentView is not already inside your scrollview in your xib/StoryBoard doc

myScrollView.contentSize = contentView.frame.size; //sets ScrollView content size

Swift 4.0

let myScrollView
let contentView

// scrollview won't scroll unless content size explicitly set

myScrollView.addSubview(contentView)//if the contentView is not already inside your scrollview in your xib/StoryBoard doc

myScrollView.contentSize = contentView.frame.size //sets ScrollView content size

Я не нашел способа установить contentSize в IB (по состоянию на Xcode 5.0) .

Примечание: Если вы используете Autolayout, лучшее место для размещения этого кода - метод -(void)viewDidLayoutSubviews.

119 голосов
/ 02 ноября 2012

Если вы не можете прокрутить представление даже после правильной установки contentSize , убедитесь, что вы снимите флажок «Использовать автоматическую планировку» в Интерфейсном Разработчике -> Инспектор файлов.

66 голосов
/ 31 марта 2014

Вам необходимо установить свойство contentSize представления прокрутки для правильной прокрутки.

Если вы используете autolayout, вам нужно установить contentSize в viewDidLayoutSubviews, чтобы применить его после завершения autolayout.

Код может выглядеть так:

-(void)viewDidLayoutSubviews
{
    // The scrollview needs to know the content size for it to work correctly
    self.scrollView.contentSize = CGSizeMake(
        self.scrollContent.frame.size.width,
        self.scrollContent.frame.size.height + 300
    );
}
45 голосов
/ 28 апреля 2012

Ответ выше верен - чтобы прокрутка происходила, необходимо установить размер контента.

Если вы используете конструктор интерфейса, то аккуратный способ сделать это с помощью пользовательских атрибутов времени выполнения. Например:

enter image description here

38 голосов
/ 02 июня 2012

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

self.scrollView.contentSize = CGSizeMake(2000, 2000);

Вместо 2000 вы можете поставить свои собственные большие цифры. И если это работает, это означает, что размер вашего контента недостаточно велик при изменении размера.

Делегат не нужен для работы прокрутки.

13 голосов
/ 13 мая 2010

Убедитесь, что для свойства contentSize представления прокрутки задан правильный размер (т. Е. Достаточно большой, чтобы охватить весь ваш контент.)

7 голосов
/ 23 ноября 2013

Снимите флажок «Использовать Autolayout» сделал для меня трюк.

Окружающая среда: xCode 5.0.2 Раскадровка ios7

4 голосов
/ 14 октября 2016

Установить contentSize свойство UIScrollview в методе ViewDidLayoutSubviews. Как то так

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    scrollView.contentSize = CGSizeMake(view.frame.size.width, view.frame.size.height)
}
4 голосов
/ 03 сентября 2014

В моем случае мне пришлось установить delaysContentTouches в значение true, потому что все объекты внутри scrollView захватывали события касания и обрабатывали сами себя, а не позволяли самому scrollView обрабатывать его.

3 голосов
/ 21 апреля 2014

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

и сохраняйте размер содержимого установленным и больше, чем родительский фрейм (уфф !!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...