具有自动调整单元格大小的 UICollectionView 错误地定位了补充视图

2024-02-06

我正在使用带有流布局的 UICollectionView 并尝试让 collectionView 根据 AutoLayout 约束适当调整单元格的大小。

虽然单元格按预期工作,但我添加到 CollectionView 的任何补充视图的布局都遇到了问题。

具体来说,在滚动后“更正”自身之前,supplementaryView 在初始布局上将位于错误的位置(即 y 原点不正确)。

作为参考,以下是我配置单元格大小的方法:

1.设置collectionViewLayout的估计项目大小

let collectionView: UICollectionView = {
    let layout = UICollectionViewFlowLayout()
    layout.estimatedItemSize = CGSizeMake(375, 50.0)
    layout.minimumInteritemSpacing = 0.0
    layout.minimumLineSpacing = 0.0
    let view = UICollectionView(frame: CGRectZero, collectionViewLayout: layout)
    view.backgroundColor = UIColor.whiteColor()
    view.alwaysBounceVertical = true
    return view
}()

2.使用Auto Layout CollectionView Cell的子类

class AutoLayoutCollectionViewCell: UICollectionViewCell {
    override func preferredLayoutAttributesFittingAttributes(layoutAttributes: UICollectionViewLayoutAttributes) -> UICollectionViewLayoutAttributes {
        layoutIfNeeded()
        layoutAttributes.bounds.size.height = systemLayoutSizeFittingSize(UILayoutFittingCompressedSize).height
        return layoutAttributes
    }
}

请注意,此时一切都按预期进行。

下一步就是我们失败的地方。

3. 提供标题的参考尺寸

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
return CGSizeMake(CGRectGetWidth(collectionView.frame), 30.0) 

}

我的问题是:为什么会发生这种情况?我怎样才能纠正这个问题?我应该如何处理自调整单元格大小的 collectionView 中的补充视图?


我遇到了同样的问题,为我解决的是子类 UICollectionViewFlowLayout 并重写以下函数:

override func invalidationContext(forPreferredLayoutAttributes preferredAttributes: UICollectionViewLayoutAttributes, withOriginalAttributes originalAttributes: UICollectionViewLayoutAttributes) -> UICollectionViewLayoutInvalidationContext {
    let context = super.invalidationContext(forPreferredLayoutAttributes: preferredAttributes, withOriginalAttributes: originalAttributes)
    context.invalidateSupplementaryElements(ofKind: UICollectionElementKindSectionHeader,
                                                at: [originalAttributes.indexPath])
    return context
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有自动调整单元格大小的 UICollectionView 错误地定位了补充视图 的相关文章

  • 使用视觉格式语言将视图置于其超级视图的中心

    我刚刚开始学习 iOS 的 AutoLayout 并了解了 Visual Format Language 除了一件事之外 一切都工作正常 我只是无法让视图在其超级视图中居中 这对于 VFL 是否可行 还是我需要自己手动创建约束 目前 不 看
  • 使用自动布局时如何调整 CALayer 的锚点?

    Note 自从提出这个问题以来 事情已经发生了变化 看here http revealapp com blog constraints and transforms html以获得近期的良好概述 在自动布局之前 您可以通过存储框架 设置锚点
  • UICollectionView - 滚动到下一页

    是否有机会使用 UICollectionView 滚动到所需的项目 scrollToItemAtIndexPath 并且不捕捉到项目本身 而是捕捉到项目所属的页面 我启用了分页功能 Cheers 你需要创建NSIndexPath而不是滚动到
  • 点击时展开 UICollectionView 及其单元格

    我正在尝试制作一个过渡动画 如链接中的演示here https dribbble com shots 2733571 Citadela countries 因此 当我单击该单元格时 它会展开并覆盖整个屏幕 这是我的代码 我不得不承认我对 C
  • iOS ScrollView 需要对 y 位置或高度进行约束

    ViewController View ScrollView Top Bottom Leading Trailing spaces to superview set to 0 ContentView Top Bottom Leading T
  • iOS 8 中的嵌套 UICollectionViews、自动布局和旋转

    我开始在一个大型项目中使用 AutoLayout 并对它感到非常惊讶 但是 现在我必须调整项目以适应旋转和尺寸类别 并且我在让视图正确运行方面遇到了很大的麻烦 基本问题是我有UICollectionViews with 再次包含 UICol
  • UICollectionView - 在单元格之间画一条线

    如何在 UICollectionView 中的单元格之间绘制一条跨越空间的线 预期的输出是这样的 我所做的最好的事情就是在每个单元格内添加行 如何连接穿过空间的线 我做了一个扩展 你可以像这样使用 collectionView drawLi
  • UICollectionView 断言失败

    我在执行时遇到此错误insertItemsAtIndexPaths in UICollectionView 断言失败 UICollectionViewData indexPathForItemAtGlobalIndex SourceCach
  • 是否可以将 UIView 的顶部固定到导航栏的底部?

    我试图将 UIView 定位在导航栏下方 20pt 但是当我相对于视图控制器上的视图设置它时 它仍然位于导航栏下方 20pt 并且我不想对其进行硬编码 是否可以将其放置在远离导航栏的位置 要以编程方式执行此操作 请使用topLayoutGu
  • UIImage 内存未释放 VM:ImageIO_JPEG_DATA?

    我在屏幕上同时有多个水平滚动的集合视图 它们都充满了图像 所有这些图像都通过 Parse api 在后台加载 我正在运行 Instrument 的分配 并且匿名 VM ImageIO JPEG DATA 类别占用了大部分正在使用的内存 应用
  • 如何在触摸时旋转图像并将图像拖动到另一个图像上

    我正在开发一个应用程序 我需要一个包含许多图像的图库 我想要做的是 当用户点击 单击任何图像时 它应该将该图像旋转到 90 度 如果用户将任何图像拖动到任何其他图像的顶部 那么这些图像应该交换它们的位置 或者我们可以说交换 彼此的位置 解释
  • 在 Swift 中获取可见的 IndexPath UICollectionView

    如何获得visible IndexPath while scrolling in collectionView 我参考了很多link1 https stackoverflow com questions 30281451 iterate o
  • UICollectionView 单元格旋转后不水平

    我有一个 UICollectionView 带有一个用于创建单元格的按钮 该单元格应按创建顺序显示 在空间允许的情况下 横向和纵向 1 2 3 4 文本视图受到灵活宽度的限制以填充单元格 单元格的大小取决于设备和旋转 每行允许 1 2 3
  • iOS 8 使用 UITextView 自动调整 UITableViewCell 大小

    iOS 8 引入了一种让 tableView 根据内容自动调整单元格高度的方法 通过 AutoLayout in viewDidLoad tableView rowHeight UITableViewAutomaticDimension t
  • 当 UIView 通过自动布局调整大小时,会调用什么方法?

    我有一个图像视图 我通过在子类中覆盖以下内容来实现圆角 void setFrame CGRect frame super setFrame frame self layout setCornerRadius frame size width
  • 如何使用自定义布局跳转到 UICollectionView 中的任何 Cell?

    我的水平 UICollectionView 中有 40 个单元格和一个按钮 当我点击按钮时 我可以从 5 号单元格跳转到 10 号单元格 但是一旦我想要转到另一个单元格 例如从 5 到 25 它不起作用 而是变为 0 code func s
  • AVPlayerLooper 每次迭代后黑闪

    我正在使用 Apple 的示例代码在UICollectionViewCell背景 我在用着AVPlayerLooper 因为它是同一视频的迭代 我的问题是 当视频结束时 它会显示轻微的黑屏闪烁 也许它正在将视频搜索到0时间 我不确定 这是代
  • 动态高度 UITableViewCell 内的动态高度 UICollectionView

    我有一个水平的UICollectionView固定到 a 的所有边缘UITableViewCell 集合视图中的项目是动态调整大小的 我想让表视图的高度等于最高集合视图单元格的高度 视图的结构如下 UI表格视图 UITableViewCel
  • 在启用滚动的情况下扩展堆栈视图内的 UITextView

    我正在尝试使用自动布局和 Stackview 来实现一些目标 我有一个垂直 Stackview 其中包含 UIView UITextView 和 UIView 如下所示 我已经在这里查看了以前的答案 但找不到一个干净的解决方案来实现此目的
  • 动画 UICollectionView 单元格大小更改并重新定位周围单元格

    Goal 以动画方式改变单元格的高度并重新定位周围的单元格 设想 集合视图中的某些单元格会加载远程图像 最初 这些单元格的大小是静态的 并显示活动指示器 加载图像后 会将其添加到其单元格中 并且更改单元格的高度以适合照片 Notes 我正在

随机推荐