如何在UIScrollView(Obj-C)中禁用垂直滚动

时间:2012-08-07 11:03:19

标签: objective-c ios uiscrollview

如果可能,我想禁用UIScrollView的垂直滚动..我的代码如下所示。工作正常,除了用户可以向上和向下滚动,我不相信...我要提前感谢.. < / p>

    UIScrollView *scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 100, self.view.frame.size.width, self.view.frame.size.height / 3)];   
    scroll.contentSize = CGSizeMake(scroll.contentSize.width,scroll.frame.size.height); 
    scroll.pagingEnabled = YES;
    scroll.backgroundColor = [UIColor blackColor];
    int xVal = 30;

    NSInteger numberOfViews = 5;
    for (int i = 0; i < numberOfViews; i++) {
        UILabel *testLabel1 = [[UILabel alloc] initWithFrame:CGRectMake(xVal, 0, 90, 100)];
        UILabel *testLabel2 = [[UILabel alloc] initWithFrame:CGRectMake(xVal, 20, 90, 100)];
        UILabel *testLabel3 = [[UILabel alloc] initWithFrame:CGRectMake(xVal, 40, 90, 100)];

        testLabel2.backgroundColor = [UIColor clearColor];
        testLabel2.text =@"Test1";
        testLabel2.textColor = [UIColor whiteColor];
        testLabel2.font = [UIFont boldSystemFontOfSize:12];

        testLabel1.backgroundColor = [UIColor clearColor];
        testLabel1.text =@"Test2";
        testLabel1.textColor = [UIColor whiteColor];
        testLabel1.font = [UIFont boldSystemFontOfSize:12];

        testLabel3.backgroundColor = [UIColor clearColor];
        testLabel3.text =@"Test3";
        testLabel3.textColor = [UIColor whiteColor];
        testLabel3.font = [UIFont boldSystemFontOfSize:12];

        xVal += 120;

        UIView *view = [[UIView alloc] initWithFrame:CGRectMake(xVal, 30, 150, 130)];
        view.backgroundColor = [UIColor blackColor];

        xVal += 200;

        [scroll addSubview:testLabel1];
        [scroll addSubview:testLabel2];
        [scroll addSubview:testLabel3];
        [scroll addSubview:view];
    }

    [self.view addSubview:scroll];

7 个答案:

答案 0 :(得分:21)

在我的情况下,我无法获得scrollview的高度(由于自动布局,我无法在viewDidLoad中获得高度)。您可以将其添加到委托方法。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    self.scrollView.contentOffset = CGPointMake(self.scrollView.contentOffset.x, 0);
}

答案 1 :(得分:10)

您必须将滚动视图内容高度设置为滚动视图高度

CGSize scrollableSize = CGSizeMake(scrollableWidth, yourScrollViewHeight);
[myScrollView setContentSize:scrollableSize];

答案 2 :(得分:4)

这可能是重复的

disabling vertical scrolling in UIScrollView

或者你也可以试试这个:

self.scrollview.contentSize = CGSizeMake(self.scrollview.frame.size.width * number_of_items, 1);

答案 3 :(得分:1)

假设它是iPhone应用程序,屏幕分辨率 320×480

现在,您将滚动视图的高度设置为self.view.frame.size.height / 3。 在这里,您的视图高度实际上被视为 460 而不是 480 (对于staus条为20px)。

因此,当您将其他视图作为子视图添加到滚动视图时,其框架将退出滚动的内容视图。因此,您需要在设置帧/内容大小时进行管理。

请告诉我这是否适合您。

答案 4 :(得分:0)

没有问题,只需更改UIScrollView的contentSize就可以了。增加它的宽度大小,它的高度应该和现在一样。另外你也可以隐藏垂直滚动条。

scroll.showsVerticalScrollIndicator = NO;
scroll.contentSize = CGSizeMake(scroll.contentSize.width + xVal,scroll.frame.size.height); 

答案 5 :(得分:0)

你应该这样做:

aScrollView.scrollsToTop = NO;
aScrollView.delegate = self;
aScrollView.contentSize = CGSizeMake(aScrollView.frame.size.width * X, aScrollView.frame.size.height/2);

答案 6 :(得分:0)

在xml文件中,scrollview有两个可用于水平滚动和垂直滚动的属性。根据您的要求,您可以选中或取消选中,如果要停止垂直或水平滚动,则必须分别使用scrollview的高度或宽度制作相同的scrollview内容大小