当前位置: 首页 > 编程笔记 >

iOS 解决UICollectionView 计算 Cell 大小的问题

胥诚
2023-03-14
本文向大家介绍iOS 解决UICollectionView 计算 Cell 大小的问题,包括了iOS 解决UICollectionView 计算 Cell 大小的问题的使用技巧和注意事项,需要的朋友参考一下

前言

  API 不熟悉导致的问题,想当然的去理解果然会出问题,这里记录一下 UICollectionView 使用问题。

正文

  陷阱一:minimumLineSpacing、minimumInteritemSpacing

    很容易就把这两个属性设置为 0 ,这两个属性是最小行间距和最小列间距,注意是最小!!也就是说实际上可以 > 0 ,并不是间距就是 0

  陷阱二:sectionInset

    设置 cell 的边距。一开始我以为是每一个 cell 的边距,相邻之间会叠加效果,实际上并不是这样的,这个属性只是保证相邻之间的间距,并不叠加!!

  理解了上面两个陷阱,我们就可以精确计算 Cell 的大小了,再来设置 itemSize 的大小才会正确。例如:

 let ITEM_MIN_WIDTH: CGFloat = 300
  let ITEM_SPACING: CGFloat = 6

  func resizeCollectionView(size: CGSize) {
    if let layout = collectionView?.collectionViewLayout as? UICollectionViewFlowLayout {
      layout.minimumLineSpacing = ITEM_SPACING
      layout.minimumInteritemSpacing = ITEM_SPACING

      var itemCount = Int(size.width / ITEM_MIN_WIDTH)
      if itemCount == 0 {
        itemCount = 1
      }

      if itemCount == 1 {
        layout.itemSize = CGSizeMake(size.width, size.width * 10 / 16)
        layout.sectionInset = UIEdgeInsetsMake(6, 0, 0, 0)
      } else {
        let width = (size.width - CGFloat((itemCount + 1)) * ITEM_SPACING) / CGFloat(itemCount)
        layout.itemSize = CGSizeMake(width, width * 10 / 16)
        layout.sectionInset = UIEdgeInsetsMake(ITEM_SPACING, ITEM_SPACING, 0, ITEM_SPACING)
      }
      collectionView?.layoutIfNeeded()
    }
  }

代码说明:

  传入当前 view 的 size ,动态计算 cell 大小,可以方便的适配 iPhone/iPad ,单列时隐藏两边边距,多列时显示两边间隙。

以上就是对IOS UICollectionView 用法和说明,希望能帮助 IOS开发的朋友。

 类似资料:
  • 我正在尝试用自我调整大小的项目实现UICollectionView (flowLayout)。 实现非常简单——我只需设置estimatedItemSize和UICollectionViewCell约束来管理它的大小。 创建集合视图后,第一次重新加载数据时一切正常,但在另一次或其他重新加载时,顶部的少数项目变得与估计的项目大小相同。如果向下和向上滚动,项目大小看起来又很好。 我花了两天时间来研究这

  • 本文向大家介绍C#算法之大牛生小牛的问题高效解决方法,包括了C#算法之大牛生小牛的问题高效解决方法的使用技巧和注意事项,需要的朋友参考一下 问题:   一只刚出生的小牛,4年后生一只小牛,以后每年生一只。现有一只刚出生的小牛,问20年后共有牛多少只? 思路:   这种子生孙,孙生子,子子孙孙的问题,循环里面还有循环的嵌套循环,一看就知道是第归问题。 于是乎,第一个版本出现:   可是这种循环在循环

  • 本文向大家介绍解决Tensorboard 不显示计算图graph的问题,包括了解决Tensorboard 不显示计算图graph的问题的使用技巧和注意事项,需要的朋友参考一下 问 题:直接载入TensorBoard 总是提示No dashboard are active for current data set.根本不显示计算图。 原 因:文件路径问题,TensorBoard 未读取到文件数据,自

  • 问题内容: 我正在尝试计算光盘上文件的大小。在Java的7本可以用做Files.walkFileTree如图我的答案在这里。 但是,如果我想使用java-8流来执行此操作,则它将适用于某些文件夹,但不适用于所有文件夹。 上面的代码可以很好地用于路径,但是会抛出以下异常 我了解它的来源以及如何使用Files.walkFileTree API避免它。 但是如何使用Files.walk() API 避免

  • 我一直在摆弄动态UICollectionViewCell,并注意到在iOS 8上对< code > uicollectionview cell 调用< code > cell . content view . systemlayoutsizefittingsize(uilayoutfitingcompressedsize)会返回不正确的宽度。目前解决这个问题的唯一方法是显式添加一个宽度约束来强制单

  • 问题内容: 我想记录一个对象占用一个项目的内存量(以字节为单位)(我正在比较数据结构的大小),并且似乎没有方法可以在Java中完成。据说C / C ++有方法,但这在Java中不存在。我尝试在创建对象之前和之后记录JVM中的可用内存,然后记录差异,但是无论结构中元素的数量如何,它只会给出0或131304,并且两者之间什么都没有。请帮助! 问题答案: 你可以使用该软件包: http://docs.o