【发布时间】:2015-08-27 20:03:07
【问题描述】:
这是我的问题:我正在 iOS (http://forum.kodi.tv/showthread.php?tid=235973) 上开发 Kodi Remote,一切运行良好(经典开发),但我的行为无法解释。
我有多个视图控制器;在其中一个(包含 UICollectionView 的 UIViewController)中,我实现了这个委托方法:
- (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);
}
我得到了集合视图框架(边界是相同的,当然,我不需要原点)并且效果很好。我在 iPhone 5 模拟器上安装了 288 宽度的任何高度。
但是,在情节提要中视图控制器的复制粘贴中,我得到了 304 宽度。最奇怪的行为是使用 FLEX,在渲染之后,集合视图的尺寸为 288 像素。
“唯一”的区别是第一个视图控制器只是被推送,第二个包含在 UITabBarController 中。
PS:我说的第一个屏幕是第三和第四个屏幕截图。
如果有人对此有解释,我会接受;)
更新 1:
如果我在 - (void)viewDidLayoutSubviews 中使集合视图布局无效,则项目被正确绘制但就像一个闪光,因为整个集合视图被重绘(下面的标题和项目)。
【问题讨论】:
-
如何定义collectionViewLayout的itemSize?
-
用上面的方法。我在情节提要中定义了一个大小(100 像素宽,160 像素高)只是为了有一个比例。
-
尝试使
viewWillAppear中的布局无效。 -
不工作。我已经试过了。我只是找到了一种方法:(我删除了集合视图上的约束边距,并在标题中添加了部分插入和边距。像魅力一样工作。
-
16pts 将是 2 个布局边距。看起来您发现了这一点,但几乎只需删除您对边距的任何布局。
标签: ios objective-c iphone uicollectionview