Почему 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)];