在IB中有一个选项可以取消滚动视图上的垂直滚动,但似乎不起作用。
如何在代码中将滚动视图设置为仅水平滚动而非垂直滚动?
在IB中有一个选项可以取消滚动视图上的垂直滚动,但似乎不起作用。
如何在代码中将滚动视图设置为仅水平滚动而非垂直滚动?
iOS7以来:
第一:内容大小的宽度必须等于您的滚动视图的宽度
第二:在您的initWithNibName中:
self.automaticallyAdjustsScrollViewInsets = NO;
就是这样。
UIScrollView
在一个 UICollectionViewCell
中,该怎么办呢? - SkouacollectionView
发送到所有视图的前面解决了这个问题。 - Husam尝试将contentSize的高度设置为scrollView的高度。这样垂直滚动就会被禁用,因为没有内容需要垂直滚动。
scrollView.contentSize = CGSizeMake(scrollView.contentSize.width,scrollView.frame.size.height);
是的,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 风格的变量符号,对于每个应用程序来说,该变量必须作为控制器类的实例成员进行声明。 - Itachi请添加以下方法
-(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
}
if (@available(iOS 11.0, *)) {
[self.scrollView setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever];
}
很多答案都包含将contentOffset
设置为0。我有一个情况,我想让scrollView内部的视图居中。这个方法对我很有用:
public func scrollViewDidScroll(_ scrollView: UIScrollView) {
scrollView.contentOffset.y = -scrollView.contentInset.top
}