插入包含页脚的 UICollectionView 部分时出现问题

2023-12-20

我有一个典型的 UICollectionView,它以垂直方式使用 UICollectionViewFlowLayout。我正在使用带有分页的 REST API 来填充集合视图。为了触发下一页的下载,我在请求页脚布局时使用委托:

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{
    RDLoadMoreReusableView *view = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:@"RDLoadMoreReusableView" forIndexPath:indexPath];
    view.delegate = self;
    [view start];
    [self loadNextPageOfAssets];
    return view;
}

这是我的 loadNextPageOfAssets 背后的代码:

-(void)loadNextPageOfAssets{
    __weak RDRadiusGridViewController *weakSelf = self;

    // Increment page and request assets. They are added to cluster.assets before the completion block is called.
    self.cluster.pagination.page++;
    [self.cluster requestAssetsWithCompletionBlock:^(NSArray *assets) {

        SM_LOG_DEBUG(@"page.total: %ld assets.count: %ld", self.cluster.pagination.totalCount, (long)assets.count);

        NSMutableArray *indexPaths = [[NSMutableArray alloc]initWithCapacity:assets.count];
        for(NSUInteger index = 0; index < assets.count; index++){
            NSIndexPath *indexPath = [NSIndexPath indexPathForItem:self.cluster.assets.count - assets.count + index inSection:0];
            SM_LOG_DEBUG(@"Inserting indexPath: %ld:%ld", (long)indexPath.item, (long)indexPath.section);
            [indexPaths addObject:indexPath];
        }
        [weakSelf.collectionView performBatchUpdates:^{
            [weakSelf.collectionView insertItemsAtIndexPaths:indexPaths];
        } completion:^(BOOL finished) {

        }];

//            [weakSelf.collectionView reloadData];
    }];
}

当我运行时,我可以转到我的 ViewController 并查看加载的资源的第一页。如果向下滚动,我将看到页脚视图(其中包含微调器),但是代码将在以下行的异常断点处中断:

[weakSelf.collectionView insertItemsAtIndexPaths:indexPaths];

-[UICollectionViewData layoutAttributesForSupplementaryElementOfKind:atIndexPath:] 中的断言失败,/SourceCache/UIKit/UIKit-3185.20/UICollectionViewData.m:829


然后,如果我继续,它会崩溃并出现错误:

2014-06-11 16:39:58.335 Radius-iOS[4901:525006]* 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“-layoutAttributesForSupplementaryElementOfKind 没有 UICollectionViewLayoutAttributes 实例:路径 {length = 2,path = 0 - 0} 处的 UICollectionElementKindSectionFooter” *首先抛出调用堆栈:


这让我很困惑。 layoutAttributesForSupplementaryElementOfKind 听起来像是与布局类有关,但我没有使用自定义流布局,而是使用提供的默认布局。听起来苹果的代码很疯狂,但我觉得我使用的一切都是正确的。

现在,如果我转移呼叫:

[self loadNextPageOfAssets];

从补充单元双端队列到 UICollectionViewCell 双端队列,并将页脚视图全部删除,然后插入效果很好。

现在我正在调用 reloadData 而不是 insert,但这很丑陋。

我是否忽略了页脚的某些内容?


VaporwareWolf 提供的答案有点破解。通过返回一个很小的尺寸而不是零尺寸,补充视图将始终存在,但尺寸太小而无法看到。这就是为什么它修复了NSInternalInconsistencyException

但是,有一个实解.

After将数据添加到数据源并before呼叫insertItemsAtIndexPaths,只需使 CollectionView 上的布局无效即可使其意识到更改。

Objective-C

[self.collectionView.collectionViewLayout invalidateLayout]

Swift

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

插入包含页脚的 UICollectionView 部分时出现问题 的相关文章

  • 以编程方式从底部裁剪图像

    我正在开发自定义相机应用程序 一切进展顺利 但我在从底部裁剪图像时遇到了问题 即 裁剪后的图像与原始图像具有完全相同的宽度 但高度将为原始图像的 1 3 并且必须从底部开始 斯威夫特3解决方案 func cropBottomImage im
  • 不明白 Swift 中的闭包示例

    我正在尝试了解 swift 和闭包 我被这个例子困住了 numbers map number Int gt Int in let result 3 number return result 什么是 number Int gt Int 它是一
  • UITableView 滑动删除 iOS 上的手势冲突

    我的手势识别器有问题 我的目标是在表视图中实现使用滑动删除 但我认为其他手势是相互冲突的 我正在使用这个库romonthego REFrostedViewController https github com romaonthego REF
  • 将 UIButton 中的图像缩放到 AspectFit?

    我想将图像添加到 UIButton 并且还想缩放图像以适合 UIButton 使图像变小 请告诉我该怎么做 这是我尝试过的 但它不起作用 将图像添加到按钮并使用setContentMode self itemImageButton setI
  • 如何将相机中的图像保存到 iPhone 图库中的特定文件夹?

    嘿 我是 iPhone 新手 最近我一直在尝试制作一个应用程序 基本上 我想要做的是 如果用户将从相机捕获任何图像 那么它应该保存在设备库中 我知道如何将照片保存在图库中 它对我有用 但我无法将所有捕获的图像保存到设备图库中的特定文件夹 例
  • 在 HTML5 iOS 7 / iOS 8 中显示十进制键盘

    经过几个小时的搜索后 我只是有一个简单的问题 是否有可能在网络浏览器输入字段中显示小数键盘 input type number 只显示数字 但我需要在左下角使用逗号或点 我尝试过任何事情 pattern step等等 但没有显示十进制键盘
  • iOS 上的 UIBezierPath 操作

    我从一条直线开始 我希望用户能够触摸并拖动该线 使其弯曲 实际上 他们有能力将线条操纵成波浪形状 我不确定从技术上实现这一目标的最简单方法 我首先创建了三次曲线的 UIBezierPaths 数组 目的是操纵控制点 但似乎一旦绘制了 UIB
  • 在 iOS 上使用 Web 服务的最佳方式?

    我想构建一个 iOS 应用程序 让您登录到网络服务 之后 应用程序将 当用户选择时 通过 https 发送登录名 密码以及请求的变量 例如 在请求 新闻更新 后 它将收到 XML 格式的请求信息 类似于
  • 在 IOS 上使用 AVComposition 混合两个音频文件

    我正在尝试混合两个音频文件 将一个音频文件放在另一个音频文件之上 不是缝合在一起 但我在 IOS 上学习 AVFoundation 时遇到了困难 我在这里遵循了这个答案 如何使用 AVMutableCompositionTrack 合并音频
  • 错误域=AVFoundationErrorDomain代码=-11814“无法记录”

    它不断给我错误 错误域 AVFoundationErrorDomain代码 11814 无法记录 我不确定问题是什么 我试图在拍照后计数器达到 1 时录制声音 static int counter counter will always b
  • 如何在 iOS 中更改部分透明图像的颜色?

    我有一个具有部分透明度的单色图像 我有正常版本和 2X 版本的图像 我希望能够用代码将图像着色为不同的颜色 下面的代码适用于普通图像 但 2X 最终会出现伪影 正常图像可能有类似的问题如果是这样 由于分辨率的原因我无法检测到它 UIImag
  • iOS 滚动视图允许滚动过去的内容

    我正在努力优化我的应用程序以适应横向和较小的屏幕 我主要使用滚动视图来实现这一点 在我的其中一个视图中 我有一个容器视图 当我在故事板中的设备之间切换时 这个容器视图看起来很完美 容器视图映射到具有滚动视图的视图控制器 该滚动视图的顶部 底
  • 进入前台后刷新数据

    更改默认设置后 我想在AppDelegate中进入前台时刷新myViewController的数据 我所做的是 AppDelegate m void applicationDidFinishLaunching UIApplication a
  • Xcode 中的 iOS 9 警告 - 此文件设置为针对早于项目部署的版本进行构建。功能可能有限

    我刚刚将我的 Mac 更新到最新的操作系统 并将 Xcode 更新到最新版本 现在我收到此警告 但我不知道该由谁来删除它 也不知道它的真正含义是什么 有人可以向我解释一下吗 Thanks Select Main storyboard in
  • 频繁绘制 CGPath 时的性能

    我正在开发一个将数据可视化为折线图的 iOS 应用程序 该图被绘制为CGPath在全屏自定义中UIView最多包含 320 个数据点 数据经常更新 图表需要相应地重新绘制 刷新率为 10 秒就很好了 到目前为止很容易 然而 我的方法似乎需要
  • git 提交错误:检测到大文件

    您好 我正在为 ios 8 1 开发一个应用程序 xcode 我已经使用 googleMaps 框架来实现自动完成功能 当我尝试在 Git 中推送我的项目时 我收到大文件检测错误 后来尝试使用 git lfs 并跟踪 git 检测到的文件
  • 苹果企业程序分发问题[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 这个问题涉及到Apple iOS 开发者企业计划 http developer apple com programs ios enterprise 我
  • UIWebView Bug:-[UIWebView cut:]:无法识别的选择器发送到实例

    In the UIWebView 如果包含文本的输入元素具有焦点 并且按下按钮导致输入失去焦点 则随后双击输入以重新获得焦点并从出现的弹出栏中选择 剪切 或 复制 或 粘贴 会导致这UIWebView因错误而崩溃 UIWebView cut
  • Swift 中的 UIAlert 自动消失?

    我有以下代码 Creates Alerts on screen for user func notifyUser title String message String gt Void let alert UIAlertController
  • RemoteIO 音频单元播放回调中的 AudioBufferList 内容

    我想 拦截 音频数据传送到 iOS 设备扬声器的过程 我相信这可以使用 RemoteIO 音频单元和回调来完成 在下面的playbackCallback中 ioData实际上包含任何音频数据吗 static OSStatus playbac

随机推荐

  • 在视图下方显示 toast 小部件

    对于那些之前在这个项目上帮助过我的人 非常感谢 我的代码不再有任何问题 并且我做了额外的调整 现在该应用程序实际上已经很强大了 我还想做一件事 请参阅屏幕截图layout https i stack imgur com NJW9Y jpg
  • 从 Windows C 函数返回字符串

    我对 C 和 C 中的纯 Windows API 级函数完全是新手 最近一直在尝试 NET 互操作性 我已经构建了一个简单的库 它已成功地将数值 int float 等 返回给 NET 调用者 但我在字符串方面没有那么幸运 我尝试了各种不同
  • jQuery Mobile 重用标题和导航

    我是 jQuery Mobile 的新手 在理解重用标题和常规导航时遇到问题 所以我创建了一个标题 其右侧有一个菜单按钮 单击此菜单栏时 会出现一个弹出窗口 其中包含其他页面的链接 div h1 Home h1 a href popupMe
  • 使用带有 '\xae' 的元素转义列表并打印结果

    我有一个清单L u steve u micheal u pedro xae 当我尝试阅读它时 出现错误 我相信它与 xae 有关 gt gt gt L u steve u micheal u pedro xae gt gt gt gt gt
  • 从java voip开始[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我必须编写一个聊天应用程序 能够使用
  • 无法 npm 安装 canvas [Windows 上的 NodeJs]?

    我正在尝试使用 ag psd 包来操作 psd 文件 它仅适用于结构 但如果您也想读取图像数据 则会遇到错误 错误如下 Cannot find module canvas code MODULE NOT FOUND 但如果我尝试安装画布 我
  • 每个派生表必须有自己的别名 - 来自组合降序 MySQL 的错误

    我想通过来自两个不同列的两个 strtotime 时间戳对一个 mysql 表进行排序 我有以下 mysql 命令 SELECT FROM SELECT 1 AS table vid req timestamp AS timestamp t
  • 失败 [INSTALL_FAILED_INVALID_APK]

    当我单击运行刚刚在 Android Studio 0 2 10 中创建的项目并选择我的 Android 通过 USB 连接并通过 USB 进行调试 时 出现以下错误 Waiting for device Target device 0123
  • Twilio 未通过 AWS Lambda 实时发送 WhatsApp 消息

    很抱歉这篇文章很长 但这只是为了更好地解释 因为英语不是我的母语 我正在使用 API Gateway Lambda 通过 POST 请求发送 WhatsApp 消息 我遇到过这种奇怪的行为 看起来 Twilio 需要在 2 个请求或一段时间
  • 如何为 flutter 中的资产创建 APK 扩展文件

    我创建了一个 flutter 应用程序 其中包含大小约为 450mb 的视频资源 我已经在Apple应用商店中成功发布了该应用程序 但 Google Play 不接受我的 APK 因为它超过了 200mb 的限制 我尝试采用创建 APK 扩
  • 在 Visual Studio 2015 中使用 Protractor 测试 ASP.NET Core 应用程序

    我有一个基于核心模板包中的 angular2 模板的 ASP NET Core 项目 我添加了第二个使用 xunit 和量角器进行项目 http dotnetthoughts net end to end testing angularjs
  • 为什么自定义并发队列上的dispatch_sync会死锁

    在自定义并发dispatch queue上使用dispatch sync时 我发现我的应用程序出现间歇性死锁 我正在使用类似于中描述的方法迈克 阿什的博客 http www mikeash com pyblog friday qa 2011
  • Curl 7.43.0 不会在 MSVC 2013 中构建

    在 Visual Studio 2013 中从 cUrl 7 43 0 构建 libcurl w ssl 时 编译器报告以下错误 1 gt 构建开始 项目 libcurl 配置 DLL 调试 DLL OpenSSL DLL LibSSH2
  • 我如何滥用空合并运算符?这是否正确评估“null”?

    我试图在 Unity 的 C 脚本中使用空合并运算符 我的项目脚本运行时设置为 NET 4 x 因此它应该可以正常工作 问题在于 即使 LEFT 操作数的计算结果为 null 它也无法正确返回 RIGHT 操作数 这是一个示例声明不起作用当
  • Terraform:在另一个资源中引用在 for_each 中创建的资源

    当我有一个托管区域时 我可以轻松创建该区域 然后通过按名称引用托管区域 在委托账户中为该区域创建 NS 记录 编辑为了避免混淆 这是我想要实现的目标 但对于多个托管区域并且域的所有者是管理帐户 https dev to arswaw cre
  • 网站移动兼容性

    如何制作既兼容桌面浏览器又兼容移动浏览器的网站 针对桌面和移动设备的替代 CSS 文件有一个技巧 在 HTML header 中实现如下
  • Pygame:为什么我无法绘制圆形精灵

    我创建了以下代码 但不知道为什么无法创建圆形精灵 我真的在网上到处找 发现了同样的事情 但当我尝试它时 它不起作用 我想我只需要在更新和其他代码行之间切换 我是 pygame 的新手 所以请非常明确 谢谢 这是主要功能 import pyg
  • 在 MvcSiteMapProvider 中为具有动态参数的 DynamicNode 创建子节点

    我正在使用 MvcSiteMapProvider 2 2 1 http mvcsitemap codeplex com 并且当这些子节点具有动态参数 id 时 在动态节点下创建子节点 使用dynamicNodeProvider 时遇到问题
  • Android 中双击耳机按钮

    我使用此代码来检测广播接收器中耳机按钮的单击和双击 int d 0 Override public void onReceive Context context Intent intent String intentAction inten
  • 插入包含页脚的 UICollectionView 部分时出现问题

    我有一个典型的 UICollectionView 它以垂直方式使用 UICollectionViewFlowLayout 我正在使用带有分页的 REST API 来填充集合视图 为了触发下一页的下载 我在请求页脚布局时使用委托 UIColl