水平和垂直两个方向滚动

Posted

技术标签:

【中文标题】水平和垂直两个方向滚动【英文标题】:Scrolling horizontal and vertical both direction 【发布时间】:2013-06-06 06:15:48 【问题描述】:

我需要水平和垂直滚动图像。

我的部分将segregated verticallyin each section itself it will be so many images which will be scrolled horizontally

我使用UICollectionView 和Ray wenderlich tutorial 进行了垂直滚动,但是如何在每个部分中进行水平滚动?

我是否应该为此使用任何其他对象,例如 UITableViewUIScrollview

任何可用的教程如何实现这一点?

Is it compulsory to implement Layout subclass or UICollectionviewFlowlayout when using collection view?

编辑

到目前为止,我已经实现了这个垂直滚动的代码,每个部分有 5 个部分,但不能滚动各个部分

- (NSInteger)collectionView:(UICollectionView *)view numberOfItemsInSection:(NSInteger)section;

    NSArray *arrayReturn = [self returnArray:section];
    return arrayReturn.count;


- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
   
    return 5;


- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath

    ImageCell *cell = [cv dequeueReusableCellWithReuseIdentifier:@"imagecell" forIndexPath:indexPath];

    NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^
        NSArray *arrSection = [NSArray arrayWithArray:[self returnArray:indexPath.section]];
        NSString *fileName = [arrSection objectAtIndex:indexPath.row];
        UIImage *image = [UIImage imageNamed:fileName];

           dispatch_async(dispatch_get_main_queue(), ^
//               cell.imgVw.image = ;
               if([CollectionView.indexPathsForVisibleItems containsObject:indexPath])
                   ImageCell *currentCell = (ImageCell *) [cv cellForItemAtIndexPath:indexPath];
                   currentCell.imgVw.image = image;
               

           );
    ];

    [self.thumbnailQueue addOperation:operation];

    return cell;


- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath


    HeaderView *Header = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"PhotoHeaderView" forIndexPath:indexPath];

    Header.lblHeaderTitle.text = @"Header title";

    Header.backgroundColor = [UIColor yellowColor];
    return Header;

【问题讨论】:

任何能准确解释您的要求的屏幕截图? 它都是基于你的ScrollView的ContentSize,所以你的ScrollView有五个合适的contentSize并且给UIScrollView的方向锁。 【参考方案1】:

这是一个类似的教程:

http://www.raywenderlich.com/4723/how-to-make-an-interface-with-horizontal-tables-like-the-pulse-news-app-part-2

基本上你需要做以下事情:

获取 tableView 或 CollectionView 您需要在每个单元格中添加启用水平滚动的滚动视图。 在创建单元格时将项目添加到每个单元格的滚动视图,并为滚动视图提供适当的内容大小。

它会给你一个想要的结果。

【讨论】:

为每个单元格添加滚动视图会导致内存问题 它会增加视图的内存使用量,但我认为这不会导致任何内存问题。这是使用内部具有某些视图的自定义单元格的类似情况。 但是如果我可以使用集合视图会更好,因为它会在方向改变时自动管理单元格的高度和宽度 正如我在回答中所说,您也可以使用相同的方法使用集合视图。它也可以基于单元格工作。 本教程帮助了我,但我将它实现为 tableview,每个单元格都有 collectionview 以水平方向滚动。这工作正常。【参考方案2】:

试试这个

**viewController.h**

IBOutlet UIScrollView *scrollViewMain;


**viewController.m**

- (void)viewDidLoad

   [super viewDidLoad];
   [self createDisplay];
// Do any additional setup after loading the view, typically from a nib.


-(void) createDisplay

for(UIView *subView in scrollViewMain.subviews)

    if(![subView isKindOfClass:[UIImageView class]])
    
        [subView removeFromSuperview];
    

int yPos =5;

for (int i=0; i< 10; i++)


    int xPosition=5;


    UIScrollView *scrollView =[[UIScrollView alloc]initWithFrame:CGRectMake(xPosition, yPos, scrollViewMain.frame.size.width, 100)];
    scrollView.backgroundColor =[UIColor clearColor];
    scrollView.autoresizingMask =UIViewAutoresizingFlexibleWidth;



    xPosition +=5;

    for (int j=0; j<10; j++)
    

        UILabel *lblTitle = [[UILabel alloc] initWithFrame:CGRectMake(xPosition, 0, 100, 100)];
        lblTitle.textColor = [UIColor whiteColor];
        lblTitle.backgroundColor =[UIColor greenColor];
        lblTitle.text = @"test";
        lblTitle.numberOfLines =0;
        lblTitle.font = [UIFont boldSystemFontOfSize:15];

        [scrollView addSubview:lblTitle];

        xPosition +=100;
        xPosition +=10;
    
    [scrollView setContentSize:CGSizeMake(xPosition, 100)];
    [scrollViewMain addSubview:scrollView];
    yPos +=120;

[scrollViewMain flashScrollIndicators];
[scrollViewMain setContentSize:CGSizeMake(0, yPos)];
  

【讨论】:

以上是关于水平和垂直两个方向滚动的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionView 中的垂直和水平滚动方向

让它在 2 个不同的方向上滚动

即使滚动方向设置为水平,UICollectionView 也会垂直显示?

当我将滚动方向从垂直更改为水平时,为啥集合视图会崩溃?

SwiftUI ScrollView 垂直和水平滚动

7-2 基于ListView实现水平和垂直方式滚动的列表