ios - UICollectionView 的大小有时是错误的

标签 ios objective-c iphone uicollectionview

这是我的问题:我正在 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+ 中消失

enter image description here

关于ios - UICollectionView 的大小有时是错误的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32258452/

相关文章:

ios - 更新 UIImageView 会导致内存泄漏

iOS:UITableView reloadData 无法刷新数据

iphone - iOS IMAP 库

iphone - 无法在 iPhone 上加载/安装应用程序

ios - 如何为在类方法中创建的对象创建 IBAction

ios - UITables 节标题中的多行文本

ios - OCMockito 是否在 verify() 调用后重置调用计数?

ios - 仅在获取 JSON 信息后使用数据

c# - MonoTouch 的性能问题?

iphone - iOS UIPickerView 在选择栏上设置图标