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 快速恢复