如何禁用的UIScrollView的水平滚动?如何禁用的UIScrollView的水平滚动?(How

2019-05-14 06:30发布

我有一个UIView类似iPhone的跳板。 我已经使用创造了它UIScrollViewUIButtons 。 我想禁用说滚动视图水平滚动。 我想只有垂直滚动。 我如何做到这一点?

Answer 1:

你必须设置contentSize的财产UIScrollView 。 例如,如果你UIScrollView是320个像素宽(在屏幕的宽度),那么你可以这样做:

CGSize scrollableSize = CGSizeMake(320, myScrollableHeight);
[myScrollView setContentSize:scrollableSize];

UIScrollView将仅垂直滚动,因为它已经可以水平显示的一切。



Answer 2:

更新:(@EranMarom在他的评论中指出出来后)

您可以在停止水平滚动或垂直滚动 ScrollViewDelegate方法。 这是怎么回事,

停止水平滚动:

如果你要水平滚动,那么你就需要增加contentOffset.x。 防止该停止在水平方向上滚动视图滚动。

- (void)scrollViewDidScroll:(UIScrollView *)sender {
    sender.contentOffset.x = 0.0
}

停止垂直滚动:

如果要垂直滚动,那么你就需要增加contentOffset.y。 防止该停止在垂直方向上滚动视图滚动。

- (void)scrollViewDidScroll:(UIScrollView *)sender {
    sender.contentOffset.y = 0.0
}

上面的代码防止在改变xy一个的scrollview contentOffset ,并导致停在滚动scrollViewDidScroll:方法。



Answer 3:

因为iOS7使用

self.automaticallyAdjustsScrollViewInsets = NO;

//并创造你与3个页面进行滚动

    self.pageView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    [self.pageView setContentSize:CGSizeMake(self.view.frame.size.width*3, self.view.frame.size.height)];
    [self.pageView setShowsVerticalScrollIndicator:NO];
    [self.pageView setPagingEnabled:YES];
    [self.view addSubview:self.pageView];


Answer 4:

迅速解决

创建两个出口,一个是你的观点,一个用于滚动视图:

@IBOutlet weak var myView: UIView!
@IBOutlet weak var scrollView: UIScrollView!

然后在你的viewDidLayoutSubviews您可以添加以下代码:

let scrollSize = CGSize(width: myView.frame.size.width, 
                        height: myView.frame.size.height)
scrollView.contentSize = scrollSize

我们所做的是收集的视图的高度和宽度,并设置scrollViews内容大小相匹配。 这将从横向滚动停止滚动型的。


更多的思考:

CGSizeMake需要的宽度和高度使用CGFloats。 您可能需要使用您现有UIScrollViews高度的第二个参数。 这将是这样的:

let scrollSize = CGSize(width: myView.frame.size.width, 
                        height: scrollView.contentSize.height)


Answer 5:

您可以选择视图,然后在Attributes Inspector取消选中User Interaction Enabled



Answer 6:

一旦我做到了与一个UITableView只有1电池更换的UIScrollView,它工作得很好。



Answer 7:

我有tableview中contentInset在viewDidLoad中设置(如下图),这是什么导致水平滚动

self.tableView.contentInset = UIEdgeInsetsMake(0, 30, 0, 0);

检查是否有任何的tableview contentInset设置不同的原因,并将其停用



Answer 8:

我这个挣扎了一段时间尝试失败在这方面和其他线程的各种建议。

然而,在另一个线程(不知道在哪里),有人建议使用在UIScrollView的负面约束为他工作。

所以,我想与结果不一致的约束的各种组合。 最终什么工作对我来说是-32开头和结尾添加约束滚动视图,并与320(并居中)的宽度增加一个(不可见)的TextView。



Answer 9:

试试这个:

CGSize scrollSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, scrollHeight);
[scrollView setContentSize: scrollSize];


Answer 10:

使用此一行。

self.automaticallyAdjustsScrollViewInsets = NO;



Answer 11:

在我的情况的内容查看的宽度比的UIScrollView的宽度更大,这是不需要的水平滚动的原因。 我通过设置内容查看等于UIScrollView中的宽度的宽度来解决它。

希望它可以帮助别人



文章来源: How to disable horizontal scrolling of UIScrollView?