ScrollView 或 UICollectionView 中的 UItableViews? [关闭]

Posted

技术标签:

【中文标题】ScrollView 或 UICollectionView 中的 UItableViews? [关闭]【英文标题】:UItableViews in a ScrollView or UICollectionView? [closed] 【发布时间】:2014-01-27 12:41:25 【问题描述】:

我正在制作一个 ios 应用程序,我需要显示某种水平滚动视图,其中包含一些表格视图。它必须是这样的:

https://dl.dropboxusercontent.com/u/53942814/Pic1.png https://dl.dropboxusercontent.com/u/53942814/Pic2.png

当用户向左或向右滑动时,将显示相应的表格视图。

我找到了两种方法:

    带有 UITableViews 的 UIScrollView 一个 UICollectionView。

有没有人知道什么是最好的方法以及如何实现它?

【问题讨论】:

在这种情况下使用 UIPageControl。 UITableview with UIPageControl? 的可能副本 【参考方案1】:

我在我的代码中实现了完全相同的代码,它复制了类似 android 的控件……

请查看我的代码的某些部分你会得到一些想法

我通过将视图添加到 UIScrollView 来完成它。 使用了 2 个滚动视图,一个用于标题,一个用于表格

1.将表格视图添加到表格的滚动视图

pageNo = 1;

for (Page *page in pageArray)

    UIStoryboard *mystoryboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
    PageContentViewController *contentViewController = [mystoryboard instantiateViewControllerWithIdentifier:@"pageContentViewController"];

    contentViewController.detailsDictionary = page.deviceDetailDictionary; //assigning dictionary will use as table data source

    /* Content page's x position calculation */

    // Formula: xPos = scrollViewWidth * ( pageNo -1 )
    // Where,
    // pageNo starts with 1

    int xPos = self.detailScrollView.frame.size.width * (pageNo -1);
    contentViewController.view.frame = CGRectMake(xPos, 0, self.detailScrollView.frame.size.width, contentViewController.view.frame.size.height);
    pageNo ++;

    [self addChildViewController:contentViewController];
    [self.detailScrollView addSubview:contentViewController.view];
    [contentViewController didMoveToParentViewController:self];

2。给titleScrollView添加UILabels

只需检查此公式即可将标题 UILabel 视图添加到顶部滚动视图

    // Formula: xPos = 75 + 10 * pageNo + (pageNo -1) * 150;
    // Where,
    // pageNo starts with 1
    // 75 = Left margin of first title
    // 10 = Space between two labels
    // 150 = Width of label 

3.使用 ScrollView(在其中添加表格)的 Delegate 方法来处理滑动

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;

    CGFloat pageWidth = self.detailScrollView.frame.size.width;

    //1. Calculate page no. if 50 percent or more area of any page visible make it as current page
    int pageNo = floor((self.detailScrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 2;

    //2. Make only current page (calculated in 1.) visible by scrolling to that page in detailScrollView
    //Formula : xPos = pageWidth * (pageNo -1)
    CGRect frame = CGRectMake( pageWidth * (pageNo -1), 0, pageWidth, 50);
    [self.detailScrollView scrollRectToVisible:frame animated:YES];//OR set content offset

    //3. Make title visible of current page by scrolling to that title in titleScrollView
    //Formula : xPos = (pageWidth / 2) * (pageNo -1)
    CGRect titleFrame = CGRectMake( 160 * (pageNo -1), 0, pageWidth, 10);
    [self.titleScrollView scrollRectToVisible:titleFrame animated:YES];//OR set content offset

    //Fade effect for non current titles

    //Set all page title alpha to low value
    for (UILabel *title in pageTitleArray)
    
        [title setAlpha:0.5];
    

    //set current page alpha to 1
    UILabel *title = [pageTitleArray objectAtIndex:pageNo -1];
    [title setAlpha:1];

3 中的代码负责在滑动动画时移动到下一页/上一页

希望这对你来说是一个很好的起点......

【讨论】:

谢谢你,这对我来说很好!) 我发现了关于这种方法的一件事。 dl.dropboxusercontent.com/u/53942814/Pic2.png 滚动视图在表格视图之前粘贴了一些空间。我花了几个小时试图确定它来自哪里。终于找到了原因。我使用导航控制器在我的应用程序中浏览视图。而这个空间就等于导航控制器栏的空间。当我删除导航控制器时,一切都会好起来的。但我真的需要导航。控制器。如何处理这个问题? 附加的 png 没有得到任何东西。看到这个演示项目github.com/AdityaDeshmane/iOSCustomPageControllerDemoProject这就是我使用它的方式。

以上是关于ScrollView 或 UICollectionView 中的 UItableViews? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 如果项目滚动一点,UICollection 快速恢复

4.UiCollection API 详细介绍

在单独的 UICollection 类中使用未解析的标识符“UICollection”

UICollection 的镜像滚动

视频库的UICollection

UICollection 单元格快速混合