Раскадровка UIScrollView contentSize?

Мне кажется, что я затронул каждую возможную причину остановки, но у меня в раскадровке есть UIScrollView, подключенный к розетке, и в viewDidLoad я установил contentSize, чтобы я мог прокручивать (да, больше, чем размер моего кадра)!

Однако, что бы я ни изменил, я просто не могу прокрутить! У меня есть несколько текстовых полей в моем просмотре прокрутки и включена подпрыгивание, поэтому я вижу, что при тестировании его перемещений вверх и вниз с моими подпредставлениями в нем, но независимо от того, что я установил для contentSize, я просто не могу прокручивать.

Что-нибудь, что я мог бы пропустить/должен проверить? Это известная проблема с использованием UIScrollView в раскадровке?

Что еще более странно, я могу сделать что-то вроде этого: [scrollView setBackgroundColor:[UIColor blueColor]]; и у меня есть синий вид прокрутки! Но установить размер содержимого не удается.

редактировать

Мой единственный код (иначе scrollview просто сбрасывается в контроллер представления раскадровки):

-(void)viewDidAppear:(BOOL)animated
{
    [scrollView setContentSize:CGSizeMake(320, 640)];
}

Зарегистрированный кадр, выходит как положено:

width: 320.00
height: 504.00

Редактировать 2

Оказывается, что удаление любых подпредставлений представления прокрутки в моей раскадровке позволяет ему прокручиваться очень хорошо. Если я добавлю к нему какое-либо подпредставление через раскадровку, даже пустой новый UIButton, он просто не будет применять прокрутку contentSize/allow.

Ответы

Ответ 1

использовать ViewDidLayoutSubview

- (void)viewDidLayoutSubviews
{
    [_scrollView setContentSize:CGSizeMake(320, 500)];
}

Последовательность вызова метода UIViewController приведена ниже

  • awakeFromNib
  • viewDidLoad
  • viewWillAppear
  • viewWillLayoutSubviews
  • viewDidLayoutSubviews
  • viewDidAppear

Ответ 2

viewDidLoad не является хорошим местом для размещения кода, который зависит от размеров кадров объектов IB. Если вы зарегистрируете contentSize своего вида прокрутки в viewDidLoad, вы увидите, что он (0,0). Переместите код (где вы задаете размер содержимого) в viewDidAppear, и он будет работать правильно.

Ответ 3

Проверьте эти

  • Включено взаимодействие с пользователем
  • Подключение к сети
  • Включено содержимое больше границ
  • прокрутка включена

например,

scrollView.contentSize = CGSizeMake(320, 640);

Моя раскадровка выглядит так: scrollview [working]

enter image description here

Ответ 4

У меня была точно такая же строка кода в viewDidAppear, и она не работала

Переместил его в viewDidLayoutSubviews и он работал правильно.

[scrollView setContentSize:CGSizeMake(320, 500)];

Спасибо трюк14 за ответ.

Ответ 5

Проблема, скорее всего, связана с автоматической компоновкой. UIScrollView требует особого внимания при использовании AutoLayout.

Быстрое исправление - привяжите один из подпрограмм прокрутки к верхнему и нижнему пространству его супервизора (вид прокрутки).

Длинная история: Вопросы по SO: UIScrollView не прокручивается независимо от большого contentSize, UIScrollView не будет прокручиваться, даже после установки размера содержимого, UIScrollView не использует ограничения автоопределения

Документация Apple: https://developer.apple.com/library/ios/technotes/tn2154/_index.html

Ответ 6

Ответ Trip14 работал у меня. В swift я закодировал его как:

override func viewDidLayoutSubviews() {

          (self.view as! UIScrollView).contentSize = CGSizeMake(600, 600)
        }

Ответ 7

Это похоже на аналогичную проблему. Другая история

Это может быть проблема с автоматической компоновкой или ограничениями в раскадровке.