如何在旋转后撤回不可见的 UICollectionViewCell 以便重用时做好准备?

2024-06-23

如何在重用发生时撤回不可见的 UICollectionViewCell 准备???

我想到的一种方法是根据布局单元格的prepareForReuse函数中的代码,但是虽然它有效,但它不是最佳的,因为它会导致比所需的更多的重新绘制。

背景:需要触发drawRect对于方向更改后当前不可见的单元格,但会弹出以供使用且尚未重绘,所以到目前为止我只能看到prepareForReuse会是合适的。问题是我正在重新绘制所有“重用”单元格,而我实际上只想重新绘制在设备的先前方向位置期间创建的最初弹出的单元格。

附加信息:所以目前我正在这样做:

在视图控制器中:

override func viewWillLayoutSubviews() {
    // Clear cached layout attributes (to ensure new positions are calculated)
    (self.cal.collectionViewLayout as! GCCalendarLayout).resetCache()
    self.cal.collectionViewLayout.invalidateLayout()

    // Trigger cells to redraw themselves (to get new widths etc)
    for cell in self.cal?.visibleCells() as! [GCCalendarCell] {
        cell.setNeedsDisplay()
    }

    // Not sure how to "setNeedsDisplay" on non visible cells here?
}

在布局单元类中:

override func prepareForReuse() {
    super.prepareForReuse()
    // Ensure "drawRect" is called (only way I could see to handle change in orientation
    self.setNeedsDisplay() 
    // ISSUE: It does this also for subsequent "prepareForReuse" after all
    // non-visible cells have been re-used and re-drawn, so really
    // not optimal
}

如果没有上面的prepareForReuse 中的代码,会发生什么情况的示例。方向改变后以及向上滚动一点后拍摄的快照:


我想我现在在这里:

import UIKit

@IBDesignable class GCCalendarCell: UICollectionViewCell {
    var prevBounds : CGRect?

    override func layoutSubviews() {
        if let prevBounds = prevBounds {
            if !( (prevBounds.width == bounds.width) && (prevBounds.height == bounds.height) ) {
                self.setNeedsDisplay()
            }
        }
    }

    override func drawRect(rect: CGRect) {
        // Do Stuff
        self.prevBounds = self.bounds
    }

}

注意到此检查在“prepareForReuse”中不起作用,因为此时单元尚未应用旋转。然而似乎在“layoutSubviews”中工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在旋转后撤回不可见的 UICollectionViewCell 以便重用时做好准备? 的相关文章

随机推荐

  • SQL数据库数据排序

    我能够获取名字和姓氏的组合长度以及按 ID 排序 但我无法按字典顺序对其进行排序 SELECT CUSTOMER ID CUSTOMER FIRST NAME CUSTOMER LAST NAME FROM CUSTOMER WHERE L
  • 递归指数法

    public static int exponent int baseNum int temp baseNum baseNum return temp exponent baseNum 现在 如果我调试它 上面的方法会 n n 变成无穷大
  • 为什么 Spring Boot Web 应用程序启动后立即关闭?

    使用STS 如果我导入 Rest Service 使用最新的 Spring Boot 开始项目并选择 Run As Spring Boot App 它启动 然后立即关闭 查看调试日志 Spring 由于某种原因决定该项目不是 Web 应用程
  • 将 lptstr 转换为 char*

    有人知道如何转换类型吗LPTSTR to char in C 取决于它是否显示为 Unicode 如果不是 Unicode LPTSTR 是 char 如果是 则 LPTSTR 是 w char 这里讨论得更好 http social ms
  • 在网格视图中动态添加网格项

    如何在网格视图中动态添加网格项 目前 我有一个包含我的图像的适配器 我想从 URL 获取图像并将它们动态添加到我的网格视图中 为网格视图创建自定义适配器 并为网格视图设置自定义适配器 这是网格项的 xml 代码
  • 无法从操作触发事件

    我正在设置 Spring 状态机事务 我想在 Event1 完成后启动 Event2 这些是我所拥有的状态 状态 gt 初始 第二 第三 我已将事务配置为从 FIRST EVENT 的操作发送 SECOND EVENT 如下所示 trans
  • 在 Highcharts 中对堆叠条形图进行分组

    我遇到的情况是 我需要将某些条形 列分组为逻辑分组以满足业务需求 我不在乎它是堆积条还是堆积柱 但我需要将某些堆栈分组在一起 各个堆栈仍然需要标记 Highcharts 是我当前的目标 但如果无法实现 我将考虑另一个库的想法 我对通过 pl
  • 在 Visual Studio Code 终端中打开 CMD

    每当我在 Visual Studio Code 中打开终端时 我都会得到一个 bash shell 我想添加 CMD 作为第二个 shell 为此 我浏览了 VS Code 文档并找到了以下命令 CTRL SHIFT 但它只打开第二个 ba
  • 如何在GDB中访问std::tr1::shared_ptr的目标

    如何访问 GDB 中 std tr1 shared ptr 的目标 这不起作用 gdb p sharedPtr gt variableOfTarget 如果我尝试使用指针对象本身 p sharedPtr 我得到这样的东西 1 std tr1
  • 模型视图演示者 - 被动视图 - 谁加载模型?

    我很好奇使用 MVP 模式来提高可测试性 我有 MVC 经验 但 MVP 似乎有所不同 我有一个在 项目 文件上运行的应用程序 该文件实际上是多个文件和文件夹的压缩存档 这个项目应该是我的模型 我将把加载模型的代码放在哪里 我还在考虑另一个
  • Linux内核如何阻止BIOS系统调用?

    BIOS 调用在 Linux 操作系统中不可用 我想知道内核如何阻止执行包含对 BIOS 子例程的调用的指令 The BIOS http en wikipedia org wiki Basic Input Output System主要在
  • 如何通过传递命名函数为 unordered_set 显式指定自定义哈希函数?

    根据已接受的答案这个问题 https stackoverflow com questions 8157937 how to specialize stdhashkeyoperator for user defined type in uno
  • 如何使用 dart json_serialized 包序列化 GeoPoint

    我正在尝试使用以下包按距离过滤我的 Firestore 集合 https github com fluttercommunity firestore helpers https github com fluttercommunity fir
  • 如何使用反射将新项目添加到集合中

    我试图使用反射将未知对象添加到未知集合类型中 当我实际执行 添加 时 我遇到了异常 我想知道是否有人可以指出我做错了什么或有替代方案 我的基本方法是迭代通过反射检索的 IEnumerable 然后将新项目添加到辅助集合中 稍后我可以将其用作
  • 定义颜色属性的多个类的优先级按声明顺序而不是规范顺序设置

    给定定义颜色属性的两个具有相同特异性的类 我认为元素类属性中列出的最后一个类将优先 From http htmlhelp com reference css struct html http htmlhelp com reference c
  • 如何导入位于pycharm项目中同一子目录中的python文件

    我在pycharm中调试和运行时出现输入错误 我的项目结构已正确扎根 etc HW3 以便HW3是根目录 我在 HW3 中有一个子文件夹 util 和一个文件 util util py 我还有另一个文件util called run tes
  • 自定义警报对话框 android

    我正在 android 中使用自定义警报对话框 我已遵循link 1 https stackoverflow com questions 9467026 change dialog position on the screen and li
  • 使用 GHC.Generics 恢复类型定义

    昨天我尝试回答这个问题是关于数据类型的表示 https stackoverflow com questions 22715572 a serializable representation of a data type for client
  • 使用 ngFor 函数时,Angular Material matToolTip 不显示

    我有一组称为报告的数据 其中包含一组网络 report networks 在返回网络数组之前 我有 model ts 来操作它 我做了一个 ngFor 来迭代网络数据以显示工作正常的详细信息 但是 在 ngFor 中添加 matToolTi
  • 如何在旋转后撤回不可见的 UICollectionViewCell 以便重用时做好准备?

    如何在重用发生时撤回不可见的 UICollectionViewCell 准备 我想到的一种方法是根据布局单元格的prepareForReuse函数中的代码 但是虽然它有效 但它不是最佳的 因为它会导致比所需的更多的重新绘制 背景 需要触发d