Почему UIScrollView оставляет пространство сверху и не прокручивается вниз
Я новичок в программировании objective-C.
Я использую UIScrollView с некоторыми надписями, изображением и текстом на нем.
Я отключил Autolayout и уже попробовал "Настроить прокрутку View Insets" (ситуация, описанная в заголовке) и выключена (не прокручивается).
Это то, что я вставляю в viewDidLoad:
[scroller setScrollEnabled:YES];
[scroller setContentSize:CGSizeMake(320, 687)];
Но я должен пропустить что-то очень простое.
Ответы
Ответ 1
1... Почему UIScrollView оставляет место сверху
С раскадрой - Перейти к диспетчеру просмотрa > Инспектор атрибутов > Снимите флажок Настроить свойство прокрутки в окне просмотра
С кодом - для дополнительного пространства viewController
свойство automaticallyAdjustsScrollViewInsets
- NO
, по умолчанию это YES
.
self.automaticallyAdjustsScrollViewInsets = false;
scroller.contentInset = UIEdgeInsetsZero;
scroller.scrollIndicatorInsets = UIEdgeInsetsZero;
scroller.contentOffset = CGPointMake(0.0, 0.0);
2... не прокручивается до нижней части
Чтобы сделать прокрутку, попробуйте с большим количеством в contentSize
, например CGSizeMake(320, 1687)
. Если это работает, это означает, что вы не устанавливаете contentSize
достаточно большим, чтобы иметь весь свой контент.
Ответ 2
Просто выберите свой контроллер просмотра и установите для показанной опции значение false (снимите флажок)
![ViewController Inspector]()
Ответ 3
iOS 11
В моем случае помогла только изменить это свойство UIScrollView Content Insets в IB с Automatic
на Never
.
![NbBLB.png]()
Ответ 4
iOS 11
if #available(iOS 11.0, *) {
scrollView.contentInsetAdjustmentBehavior = .never
} else {
automaticallyAdjustsScrollViewInsets = false
}
Ответ 5
Swift 3.0
self.automaticallyAdjustsScrollViewInsets = false
scrollView.contentInset = UIEdgeInsets.zero
scrollView.scrollIndicatorInsets = UIEdgeInsets.zero;
Ответ 6
На iPhoneX это также будет происходить из-за каких-то бессмысленных вещей в безопасной области, которые пытались объяснить с помощью автоматического макета. Исправить (для iPhoneX) с этим:
if (@available(iOS 11.0, *)) {
scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}
Ответ 7
В вашем представлении .m файла используйте этот код, чтобы исправить эту проблему.
-(void)layoutSubviews{
// To fix iOS8 bug of scrollView autolayout
if([[[[[UIDevice currentDevice]systemVersion] componentsSeparatedByString:@"."]objectAtIndex:0] integerValue] == 8){
[self.tableView setContentInset:UIEdgeInsetsMake(0, 0, 0, 0)];
}
}
Ответ 8
Swift 3.0
self.automaticallyAdjustsScrollViewInsets = false
scrollView.contentInset = UIEdgeInsets.zero
scrollView.scrollIndicatorInsets = UIEdgeInsets.zero;
scrollView.contentOffset = CGPoint(x: 0.0, y: 0.0);
Ответ 9
Swift 3 (автоматический макет)
- Измените "Поля макета" на явный
- Установите поля для ваших нужд
![введите описание изображения здесь]()
Ответ 10
На самом деле, поле не имеет ничего общего с ScrollViewInsets
или contentOffset
. Это просто конфликт между SuperView.Top
и закреплением SafeArea.Top
, который возникает, когда вы закрепляете UIScrollView сверху, снизу, слева и справа.
Это правильный способ покрыть верхнее поле.
1) Закрепите все четыре стороны.
![Pinning]()
2) Выберите верхнее ограничение> Изменить второй элемент на Superview.Top
![conflict]()
3) Затем последним шагом является изменение константы на 0 (ноль). ![enter image description here]()
Вы также можете проверить это: https://github.com/29satnam/MoveTextFieldWhenKeyboardAppearsSwift
Ответ 11
Это работает для меня,
_scrollView.scrollIndicatorInsets = UIEdgeInsetsZero;
_scrollView.contentOffset = CGPointMake(0.0, 0.0);
[_scrollView setContentSize:CGSizeMake(self.view.frame.size.width, self.view.frame.size.height)];