В IB есть возможность снять флажок с вертикальной прокрутки при просмотре прокрутки, но, похоже, это не работает.
Как можно настроить scrollview для прокрутки только по горизонтали, а не по вертикали в коде, а не в IB?
iphone
ios
uiscrollview
система
источник
источник
Ответы:
Попробуйте установить высоту contentSize равной высоте scrollView. Затем следует отключить вертикальную прокрутку, потому что вертикально прокручивать нечего.
scrollView.contentSize = CGSizeMake(scrollView.contentSize.width,scrollView.frame.size.height);
источник
начиная с iOS7:
сначала: ширина размера содержимого должна быть равна ширине вашего прокрутки
второй: в вашем initWithNibName:
self.automaticallyAdjustsScrollViewInsets = NO;
Это оно.
источник
да, ответ 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
источник
float oldY;
приведенном выше коде. Это символ переменной в стиле C для каждого приложения, переменная ДОЛЖНА быть объявлена как член экземпляра класса контроллера.Включите следующий метод
-(void)viewDidLayoutSubviews{ self.automaticallyAdjustsScrollViewInsets = NO; }
и установите ширину размера содержимого представления прокрутки, равную ширине представления прокрутки.
источник
Вам нужно передать 0 в размере содержимого, чтобы отключить, в каком направлении вы хотите.
Чтобы отключить вертикальную прокрутку
scrollView.contentSize = CGSizeMake(scrollView.contentSize.width,0);
Чтобы отключить горизонтальную прокрутку
scrollView.contentSize = CGSizeMake(0,scrollView.contentSize.height);
источник
Я обновил размер контента, чтобы отключить вертикальную прокрутку, но возможность прокрутки сохранилась. Затем я понял, что мне нужно отключить вертикальный отскок, чтобы полностью отключить прокрутку.
Может и есть люди с этой проблемой.
источник
- (void)scrollViewDidScroll:(UIScrollView *)aScrollView { [aScrollView setContentOffset: CGPointMake(aScrollView.contentOffset.x,0)]; }
вы должны были подтвердить
UIScrollViewDelegate
aScrollView.delegate = self;
источник
Просто установите y, чтобы он всегда был сверху. Необходимо соответствовать UIScrollViewDelegate
func scrollViewDidScroll(scrollView: UIScrollView) { scrollView.contentOffset.y = 0.0 }
Это сохранит эффект замедления / ускорения прокрутки.
источник
В iOS 11 не забудьте добавить следующее, если вы заинтересованы в создании прокрутки, которая придерживается границ экрана, а не безопасной области:
if (@available(iOS 11.0, *)) { [self.scrollView setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever]; }
источник
Из iOS11 можно использовать следующее свойство
let frameLayoutGuide: UILayoutGuide
Если установить ограничения для frameLayoutGuide.topAnchor и frameLayoutGuide.bottomAnchor к тому же якорей некоторых подвид вашего Scrollview то вертикальная полоса прокрутки будет отключена и высота Scrollview будет равна высоте ее подвид.
источник
Наиболее очевидное решение - запретить изменение координаты Y в вашем подклассе.
override var contentOffset: CGPoint { get { return super.contentOffset } set { super.contentOffset = CGPoint(x: newValue.x, y: 0) } }
Это единственное подходящее решение в ситуациях, когда:
источник
Многие ответы включают установку значения
contentOffset
0. У меня был случай, когда я хотел, чтобы представление внутри scrollView было центрировано. Это сработало для меня:public func scrollViewDidScroll(_ scrollView: UIScrollView) { scrollView.contentOffset.y = -scrollView.contentInset.top }
источник