这是我的问题:我正在 iOS 上开发 Kodi Remote ( http://forum.kodi.tv/showthread.php?tid=235973 ),一切都运行得很好(经典开发),但我遇到了无法解释的行为。
我有多个 View Controller ;在其中之一(包含 UICollectionView 的 UIViewController)中,我实现了这个委托(delegate)方法:
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
CGSize originalSize = [(UICollectionViewFlowLayout *)collectionViewLayout itemSize];
CGSize collectionViewSize = [collectionView frame].size;
CGFloat interItemSpacing = [(UICollectionViewFlowLayout *)collectionViewLayout minimumInteritemSpacing];
UICollectionViewFlowLayout *collectionViewFlowLayout = (UICollectionViewFlowLayout *)[[self collectionView] collectionViewLayout];
UIEdgeInsets sectionInset = [collectionViewFlowLayout sectionInset];
CGFloat usableWidth = (collectionViewSize.width - ((kColumns - 1) * interItemSpacing) - sectionInset.left - sectionInset.right);
CGFloat width = usableWidth / kColumns;
CGFloat height = width * originalSize.height / originalSize.width;
return CGSizeMake(width, height);
}
我得到了 Collection View 框架(边界是相同的,当然,我不需要原点)并且它工作得很好。我使用 iPhone 5 模拟器,无论高度如何,宽度均为 288。
但是,在 Storyboard中 View Controller 的复制粘贴中,我得到了 304 宽度。最奇怪的行为是使用 FLEX,渲染后, Collection View 的尺寸为 288 像素。
“唯一”的区别是第一个 View Controller 只是被推送,第二个 View Controller 包含在 UITabBarController 中。
PS:我所说的第一个屏幕是第三个和第四个屏幕截图。
如果有人对此有解释,我会接受;)
更新 1:
如果我使 - (void)viewDidLayoutSubviews 中的 Collection View 布局无效,则项目会正确绘制,但会出现闪烁,因为整个 Collection View 都会重新绘制(下面的标题和项目)。
最佳答案
- (CGSize)collectionView:(UICollectionView *)collectionView
layout:(UICollectionViewLayout*)collectionViewLayout
sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
return CGSizeMake(self.collectionView.frame.size.width,
self.collectionView.frame.size.height);
}
并取消选中“约束到边距”并单击所有红色虚线约束 所以 -8 填充将在 iPhone 6+ 中消失
关于ios - UICollectionView 的大小有时是错误的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32258452/