Раскадровка 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
Это похоже на аналогичную проблему. Другая история
Это может быть проблема с автоматической компоновкой или ограничениями в раскадровке.
Ответ 8
Добро пожаловать в 2019, вы можете сделать большую часть этого в Xcode 10.
Смотрите https://github.com/stuffmc/HorizonScroll