最初的UICollectionView页面是第二页而不是第一页

时间:2014-01-30 07:41:44

标签: ios objective-c uitableview uicollectionview uisplitview

我有UISplitView之类的设计(不是UISplitView,我使用View container来模仿它。)

左侧容器有table view,右侧容器有collection view

如果我点击左侧容器中的tableview cell,则会相应更改右侧collection view

collection view是分页的,它总是有两页。

如果我滚动到collection view的第二页,现在我点击左侧容器中的新table view cell,它会在正确的容器中加载正确的collection view,但它在第二页而不是第一页!

我四处寻找并找不到解决方案。

我很感激任何建议。


更新:添加了相关代码。

以下代码位于right container

- (void)viewDidLoad
{
[super viewDidLoad];

[self setup];
self.collectionView.delegate = self;

self.pageControl.currentPage = 0;
[self.collectionView scrollRectToVisible:CGRectMake(0, 0, self.collectionView.frame.size.width, self.collectionView.frame.size.width) animated:NO];

}

函数setup定义如下:

-(void)setup
{    
self.collectionView.pagingEnabled = YES;
self.collectionView.directionalLockEnabled = YES;
self.collectionView.bounces = NO;
self.collectionView.showsHorizontalScrollIndicator = NO;
}

感谢。

1 个答案:

答案 0 :(得分:0)

为什么不能编写代码来滚动滚动视图,以便在用户选择左容器中的行时显示第一页的框架。

[contentScrollView scrollRectToVisible:pageRect animated:YES];

以下是我为解决此问题而创建的示例:

您可以下载代码格式Here

下载源代码后,只需将以下方法添加到MLKPageViewController.m

即可
- (void)showPageAtIndex:(NSInteger)index
{
    if( index >= self.contentVCs.count )
        return;

    UIView *contentView = ((UIViewController *)[self.contentVCs objectAtIndex:index]).view;
    CGRect pageRect;

    if( mlkPageControl.currentPage == FIRST_PAGE || mlkPageControl.currentPage == LAST_PAGE )
    {
        pageRect = CGRectMake( (index * CONTENT_VIEW_SPACING) + index *  contentView.frame.size.width, contentScrollView.frame.origin.y , contentScrollView.frame.size.width, contentScrollView.frame.size.height);
    }
    else
    {
        pageRect = CGRectMake( (index * CONTENT_VIEW_SPACING) + index *  contentView.frame.size.width - CONTENT_VIEW_SPACING, contentScrollView.frame.origin.y , contentScrollView.frame.size.width, contentScrollView.frame.size.height);
    }

    [contentScrollView scrollRectToVisible:pageRect animated:YES];
}

通过传递页面索引从MLKPageViewController的“ViewDidLoad”方法调用上面的方法。