2015-12-22 5 views
3

У меня есть UIScrollView, который прокручивается только в вертикальном направлении, мне нужно разместить UIScrollView, который может перемещаться горизонтально, например приложение AppStore в яблочных устройствах. Я не хочу нас UICollectionView, так как у меня есть статические данные, и мне нужно всего 3 горизонтальных UIScrollViewМогу ли я установить UIScrollView внутри другого UIScrollView

+0

вы можете подклассифицировать uiscrollview, чтобы дать ему свойства, такие как родительский ребенок, или просто дать теги, чтобы определить, что такое scrollview. –

+0

Да, возможно. –

ответ

4

Да, вы можете. Поскольку подклассы UIScrollViewUIView будут вести себя так, как ожидалось, при добавлении subviews. Каждое представление прокрутки позволит прокручивать на основе его свойства contentSize.

Objective-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]; 

Swift:

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

2

да это возможно, но вы должны поддерживать тег Scrollview для обработки методы делегата от просмотр прокрутки.

3

Да, вы можете. Но вам нужно различать виды прокрутки в методах делегатов прокрутки. Либо вы можете использовать тег или если вы объявляете их как глобальные переменные во всем классе, вы можете напрямую обращаться к ним с их names.Eg:

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

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

Теперь внутри делегатом метода вы можете проверить для вида прокрутки, как

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

Это возможно, только если объекты просмотра прокрутки являются глобальными для класса. Вы также можете дать тег и проверить для тега прокрутки методы вида делегата, как

parentScrollView. tag = 101; 

И спирального метод вида делегата

if(scrollview.tag = 101) 
    { 
    // do your actions 
    } 
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.

Смежные вопросы