Отключение вертикальной прокрутки в UIScrollView - PullRequest
82 голосов
/ 23 февраля 2011

В IB есть возможность снять вертикальную прокрутку в просмотре прокрутки, но, похоже, это не работает.

Как можно настроить просмотр прокрутки только для горизонтальной прокрутки, а не для вертикали в коде, а не для IB

Ответы [ 9 ]

134 голосов
/ 22 января 2014

с iOS7:

первое: ширина размера контента должна быть равна ширине вашего прокрутки

секунда: в вашем initWithNibName:

self.automaticallyAdjustsScrollViewInsets = NO;

Вот и все.

117 голосов
/ 23 февраля 2011

Попробуйте установить высоту contentSize на высоту scrollView.Тогда вертикальная прокрутка должна быть отключена, потому что вертикальной прокрутки будет нечего.

scrollView.contentSize = CGSizeMake(scrollView.contentSize.width,scrollView.frame.size.height);
49 голосов
/ 23 февраля 2011

да, ответ pt2ph8 правильный,

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

 -(void)scrollViewDidScroll:(UIScrollView *)aScrollView;

просто добавьте это в свой UIViewController

float oldY; // here or better in .h interface

- (void)scrollViewDidScroll:(UIScrollView *)aScrollView
{
    [aScrollView setContentOffset: CGPointMake(aScrollView.contentOffset.x, oldY)];
    // or if you are sure you wanna it always on top:
    // [aScrollView setContentOffset: CGPointMake(aScrollView.contentOffset.x, 0)];
}

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

22 голосов
/ 17 ноября 2014

Включите следующий метод

-(void)viewDidLayoutSubviews{
    self.automaticallyAdjustsScrollViewInsets = NO;
}

и установите ширину размера содержимого представления прокрутки, равную ширине представления прокрутки.

18 голосов
/ 13 февраля 2016

Вам нужно передать 0 в размере контента, чтобы отключить, в каком направлении вы хотите.

Чтобы отключить вертикальную прокрутку

scrollView.contentSize = CGSizeMake(scrollView.contentSize.width,0);

Чтобы отключить горизонтальную прокрутку

scrollView.contentSize = CGSizeMake(0,scrollView.contentSize.height);
17 голосов
/ 19 июля 2012

Я обновил размер контента, чтобы отключить вертикальную прокрутку, и возможность прокрутки все еще оставалась. Затем я понял, что мне нужно отключить вертикальный отскок, чтобы полностью отключить прокрутку.

Может быть, есть люди с этой проблемой.

13 голосов
/ 18 марта 2015
- (void)scrollViewDidScroll:(UIScrollView *)aScrollView
{
    [aScrollView setContentOffset: CGPointMake(aScrollView.contentOffset.x,0)];

}

Вы должны подтвердить UIScrollViewDelegate

aScrollView.delegate = self;
3 голосов
/ 26 апреля 2018

В iOS 11, пожалуйста, не забудьте добавить следующее, если вы заинтересованы в создании прокрутки, которая придерживается границ экрана, а не безопасной области .:

if (@available(iOS 11.0, *)) {
    [self.scrollView setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever];
}
3 голосов
/ 21 января 2016

Просто установите y всегда сверху.Необходимо соответствовать UIScrollViewDelegate

func scrollViewDidScroll(scrollView: UIScrollView) {
        scrollView.contentOffset.y = 0.0
}

Это сохранит эффект замедления / ускорения прокрутки.

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