我可以将UIScrollView放在另一个UIScrollView中

时间:2015-12-22 04:11:08

标签: ios objective-c

我有UIScrollView仅在垂直方向滚动,我需要放置UIScrollView,它可以水平移动,就像Apple设备中的AppStore应用程序一样。我不想要我们UICollectionView因为我有静态数据而我只需要3个水平UIScrollView

4 个答案:

答案 0 :(得分:4)

是的,你可以。作为UIScrollView子类UIView,在添加子视图时,它将按预期运行。每个滚动视图都将根据其contentSize属性启用滚动。

<强>目标-C:

UIScrollView *horizontalScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(40.0, 40.0, 300.0, 300.0)];
horizontalScrollView.backgroundColor = [UIColor lightGrayColor];
horizontalScrollView.contentSize = CGSizeMake(2000.0, 300.0);
[self.view addSubview:horizontalScrollView];

UIScrollView *verticalScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(40.0, 40.0, 220.0, 220.0)];
verticalScrollView.backgroundColor = [UIColor greenColor];
verticalScrollView.contentSize = CGSizeMake(220.0, 2000.0);
[horizontalScrollView addSubview:verticalScrollView];

<强>夫特:

let horizontalScrollView = UIScrollView(frame: CGRectMake(40.0, 40.0, 300.0, 300.0))
horizontalScrollView.backgroundColor = UIColor.lightGrayColor()
horizontalScrollView.contentSize = CGSizeMake(2000.0, 300.0)
self.view.addSubview(horizontalScrollView)

let verticalScrollView = UIScrollView(frame: CGRectMake(40.0, 40.0, 220.0, 220.0))
verticalScrollView.backgroundColor = UIColor.greenColor()
verticalScrollView.contentSize = CGSizeMake(220.0, 2000.0)
horizontalScrollView.addSubview(verticalScrollView)

Nested scroll views in action

答案 1 :(得分:3)

是的,你可以。但是您需要在滚动视图委托方法中区分滚动视图。您可以使用标签,或者如果您在整个班级中将它们声明为全局变量,则可以使用其名称直接访问它们.Eg:

UIScrollView *parentScrollView = [[UIScrollView alloc] init];
parentScrollView.delegate = self;
[self.view addSubview:parentScrollView];

UIScrollView *childScrollView = [[UIScrollView alloc] init];
childScrollView.delegate = self;
[parentScrollView addSubview:childScrollView];

现在在delegate方法中,您可以检查滚动视图,如

if(scrollview == parentScrollview)
{
// do your actions
}

仅当您的滚动视图对象是该类的全局视图时,才可以执行此操作。您还可以在滚动视图委托方法中提供标记并检查标记,如

parentScrollView. tag = 101;

在滚动视图委托方法

if(scrollview.tag = 101)
    {
    // do your actions
    }

答案 2 :(得分:2)

是的,但是你必须维护scrollview的标签来处理滚动视图的委托方法。

答案 3 :(得分:2)

UIScrollView有一个名为scrollEnabled的属性,您可以将其设置为NO以禁用父滚动视图中的滚动。

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    if(scrollView == innerView)
        outerView.scrollEnabled = NO;
    else
        outerView.scrollEnabled = YES;
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    if(scrollView == innerView)
    {
         if(innerView.contentOffset.x + innerView.frame.size.width == innerView.contentSize.width)
         {
              outerView.scrollEnabled = NO;
         }
         else
         {
              outerView.scrollEnabled = YES;
         }
    }
}

否则,您可以浏览以下link