gpt4 book ai didi

objective-c - setCollectionViewLayout :animated causing debug error: Snapshotting a view that has not been rendered results in an empty snapshot

转载 作者:太空狗 更新时间:2023-10-30 03:17:57 26 4
gpt4 key购买 nike

我正忙于 iOS7 中的 UICollectionView。

我要在两种不同的布局之间更改我的 Collection View 的布局。它们是 UICollectionViewFlowLayout 的子类。

这是我在点击按钮时更改 View 的方式:

-(void)changeViewLayoutButtonPressed
{
self.changeLayout = !self.changeLayout;

if (self.changeLayout){
[self.tableViewLayout invalidateLayout];
[self.tradeFeedCollectionView setCollectionViewLayout:self.grideLayout animated:YES];

}

else {

[self.grideLayout invalidateLayout];
[self.tradeFeedCollectionView setCollectionViewLayout:self.tableViewLayout animated:YES];

}
}

此方法按预期工作,并且 View 以漂亮的动画更改。但是在控制台中我收到了这些消息:

Snapshotting a view that has not been rendered results in an empty snapshot. Ensure your view has been rendered at least once before snapshotting or snapshot after screen updates.

关于造成这种情况的原因有什么想法吗?

最佳答案

只是扩展上面的评论...

关于我收到的警告,奇怪的是我的简历有三个可能的数据源。它们基本上都是相同的数据:Collection 1、Collection 2、Collection 1 & 2。

当我刚刚查看收藏 1 或收藏 2 时,我没有收到任何警告。只有当我同时查看这两者时,我才会收到警告。奇怪的是,展示一切的事情越来越少。 Collection 1 和 Collection 2 是从“Whole”中提取的,所以多了一步。不确定这意味着什么。

无论如何,我不再收到消息。

这是我原来的:

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
[self arrangeCollectionView];
}

- (void)arrangeCollectionView
{
UICollectionViewFlowLayout *flowLayout = (UICollectionViewFlowLayout *)self.cv.collectionViewLayout;
if (UIInterfaceOrientationIsPortrait(self.interfaceOrientation))
{
flowLayout.sectionInset = UIEdgeInsetsMake(16, 16, 16, 16);
flowLayout.minimumInteritemSpacing = 16;
flowLayout.minimumLineSpacing = 16;
}
else
{
flowLayout.sectionInset = UIEdgeInsetsMake(26, 26, 26, 26);
flowLayout.minimumInteritemSpacing = 26;
flowLayout.minimumLineSpacing = 26;
}
self.cv.collectionViewLayout = flowLayout;
}

这给我的信息是旋转到横向,但旋转到纵向时却没有。

这两项更改都导致不再有消息:

1。使用

didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation

调用 arrangeCollectionView 而不是

willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

解决了警告问题,但使过渡更加粗糙。

2。摆脱对 UICollectionViewFlowLayout 的显式更改并使用 DelegateFlowLayout 方法并从 willAnimateRotation... 调用 reloadData :

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
[self.cv reloadData];
}

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
CGSize retval = CGSizeMake(172, 256);
return retval;
}

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
{
return UIInterfaceOrientationIsPortrait(self.interfaceOrientation) ? UIEdgeInsetsMake(16 + 66, 16, 16, 16) : UIEdgeInsetsMake(26 + 66, 26, 26, 26);
}

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section
{
return UIInterfaceOrientationIsPortrait(self.interfaceOrientation) ? 16 : 28;
}

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section
{
return UIInterfaceOrientationIsPortrait(self.interfaceOrientation) ? 16 : 28;
}

这对我来说效果最好。不再有消息,并且从一种布局到另一种布局的过渡相当平稳。

希望这可以帮助您找到它。我想在流布局失效期间截取屏幕截图并呈现给用户,并且正在截取此快照,同时布局已经在 willRotate... 中重置...也许无论如何.仍然不确定为什么我对 2 个数据子集的消息总是为零,而对整个数据集总是消息。

祝你好运,希望对你有帮助。

关于objective-c - setCollectionViewLayout :animated causing debug error: Snapshotting a view that has not been rendered results in an empty snapshot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22451793/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com