Peek & Pop - Pop 导致 UICollectionView 中的错误单元格
Peek & Pop - Pop leading to wrong cell in UICollectionView
我有一个嵌入在 UINavigationController 中的 UITableViewController,我正在尝试将 Peek & Pop 实现到 TableView 中。我的 "peek" 部分工作正常,但是当我尝试 "pop" 进入下一个 ViewController 时,我所在的单元格 "peeking" 和下一个单元格都显示了。我 "popping" 进入 UICollectionView,正如我提到的,"peek" 一半显示正确的单元格,但 "pop" 没有。只有当我使用 [self.navigationController showViewController:viewControllerToCommit sender:nil];
或 [self.navigationController pushViewController:viewControllerToCommit animated:YES];
执行 "pop" 时才会出现此问题。
这是显示正确单元格的 "Peek"
"Pop" 显示错误的单元格
我尝试使用 [self presentViewController:viewControllerToCommit animated:YES completion:nil];
并显示了正确的单元格,但它没有提供我需要的导航元素,所以我无法使用它(除非有办法获得所有导航元素返回)。
我最初的想法是我的应用计算 CollectionViewCell 大小的方式有问题。这是我为此使用的代码,尽管它似乎适用于 Peek & Pop 以外的所有内容。
-(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 中的第一个或最后一个项目是 "peeked" 时,"pop" 工作得很好。如有任何帮助,我们将不胜感激。
所以我终于弄清楚是什么导致了这个问题。我的应用程序是一个通用应用程序,我在 iPads 上使用 Popover Segue。在 ViewController 的 viewWillAppear
中 "popping" 是错误的,我使用 [self setPreferredContentSize:CGSizeMake(400.0, 600.0)]
来确定 iPad 上 Popover 的大小。一旦我删除了那条线,我的 Peek & Pop 就完美地工作了。
我最终在我的 ViewController @property BOOL fromPeek
中添加了一个新的 属性 并在我的 - (UIViewController *)previewingContext:(id <UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location
中将 属性 设置为 YES
预览 ViewController。最后,我把我的viewWillAppear
修改为if(!fromPeek) [self setPreferredContentSize:CGSizeMake(400.0, 600.0)];
,问题就解决了!
我有一个嵌入在 UINavigationController 中的 UITableViewController,我正在尝试将 Peek & Pop 实现到 TableView 中。我的 "peek" 部分工作正常,但是当我尝试 "pop" 进入下一个 ViewController 时,我所在的单元格 "peeking" 和下一个单元格都显示了。我 "popping" 进入 UICollectionView,正如我提到的,"peek" 一半显示正确的单元格,但 "pop" 没有。只有当我使用 [self.navigationController showViewController:viewControllerToCommit sender:nil];
或 [self.navigationController pushViewController:viewControllerToCommit animated:YES];
执行 "pop" 时才会出现此问题。
这是显示正确单元格的 "Peek"
"Pop" 显示错误的单元格
我尝试使用 [self presentViewController:viewControllerToCommit animated:YES completion:nil];
并显示了正确的单元格,但它没有提供我需要的导航元素,所以我无法使用它(除非有办法获得所有导航元素返回)。
我最初的想法是我的应用计算 CollectionViewCell 大小的方式有问题。这是我为此使用的代码,尽管它似乎适用于 Peek & Pop 以外的所有内容。
-(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 中的第一个或最后一个项目是 "peeked" 时,"pop" 工作得很好。如有任何帮助,我们将不胜感激。
所以我终于弄清楚是什么导致了这个问题。我的应用程序是一个通用应用程序,我在 iPads 上使用 Popover Segue。在 ViewController 的 viewWillAppear
中 "popping" 是错误的,我使用 [self setPreferredContentSize:CGSizeMake(400.0, 600.0)]
来确定 iPad 上 Popover 的大小。一旦我删除了那条线,我的 Peek & Pop 就完美地工作了。
我最终在我的 ViewController @property BOOL fromPeek
中添加了一个新的 属性 并在我的 - (UIViewController *)previewingContext:(id <UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location
中将 属性 设置为 YES
预览 ViewController。最后,我把我的viewWillAppear
修改为if(!fromPeek) [self setPreferredContentSize:CGSizeMake(400.0, 600.0)];
,问题就解决了!