首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Peek & Pop - Pop导致UICollectionView中的错误单元

Peek & Pop - Pop导致UICollectionView中的错误单元
EN

Stack Overflow用户
提问于 2016-02-20 18:23:34
回答 1查看 477关注 0票数 6

我有一个嵌入在UITableViewController中的UINavigationController,我正在尝试在TableView中实现Peek & Pop。我的“窥视”部分工作得很好,但是当我试图“弹出”到下一个ViewController时,我正在“窥视”的单元格和下一个单元格都会显示出来。我正在“弹出”一个UICollectionView,正如我提到的,"peek“半显示正确的单元格,但是"pop”没有显示。只有在使用[self.navigationController showViewController:viewControllerToCommit sender:nil];[self.navigationController pushViewController:viewControllerToCommit animated:YES];执行"pop“时才会发生此问题。

下面是显示正确单元格的"Peek“

和显示错误单元格的“流行音乐”

我尝试使用[self presentViewController:viewControllerToCommit animated:YES completion:nil];,并显示了正确的单元格,但这并没有给出我所需要的导航元素,所以我不能使用它(除非有一种方法可以让所有导航元素返回)。

我最初的想法是,我的应用程序如何计算出CollectionViewCell的大小是有问题的。下面是我所使用的代码,尽管它似乎与除了Peek & Pop之外的其他所有东西都能正常工作。

代码语言:javascript
复制
-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    CGSize collectionViewBounds = collectionView.bounds.size;

    int navigationHeight = self.navigationController.navigationBar.bounds.size.height;
    int toolbarHeight = self.navigationController.toolbar.bounds.size.height;
    int statusBarHeight = [UIApplication sharedApplication].statusBarFrame.size.height;

    int cellHeight = collectionViewBounds.height - (navigationHeight + statusBarHeight + toolbarHeight);
    int cellWidth = collectionViewBounds.width;

    return CGSizeMake(cellWidth, cellHeight);
}

让我更困惑的是,当TableView中的第一项或最后一项被“窥视”时,"pop“就会完美地工作。如果能对此提供任何帮助,我们将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-07 10:48:09

所以我终于弄明白是什么导致了这个问题。我的应用程序是一个通用应用程序,我在iPads上使用了Popover。在“弹出”错误的viewWillAppearof my ViewController中,我使用[self setPreferredContentSize:CGSizeMake(400.0, 600.0)]来确定iPad上的Popover的大小。一旦我去掉了这句话,我的Peek & Pop就完美地工作了。

最后,我向我的ViewController @property BOOL fromPeek添加了一个新属性,并在预览ViewController的- (UIViewController *)previewingContext:(id <UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location中将该属性设置为YES。最后,我将我的viewWillAppear修改为if(!fromPeek) [self setPreferredContentSize:CGSizeMake(400.0, 600.0)];,现在问题已经解决了!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35527237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档