展开表格视图单元格消失

2024-01-21

我的单元格通过调用 setExpanded: 方法更改其高度来扩展。

然后,我调用 reloadRows At IndexPath: 来刷新单元格。

问题是细胞会消失并随机重新出现。我怀疑这与索引的工作方式有关。

如果我调用 reloadData 或 beginUpdates/endUpdates,单元格将按预期工作,但我会丢失动画。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    JVCell *cell = (JVCell*)[tableView cellForRowAtIndexPath:indexPath];
    JVCell *previousCell = nil;

    if( previousIndexPath_ != nil ) // set to nil in viewDidLoad
    {
        previousCell = (JVCell*)[tableView cellForRowAtIndexPath:previousIndexPath_];
    }


    // expand or collapse cell if it's the same one as last time
    if( previousCell != nil && [previousIndexPath_ compare:indexPath] == NSOrderedSame && [previousCell expandable] )
    {
        [previousCell setExpanded:![cell expanded]];
        NSArray *indexPathArray = [NSArray arrayWithObject:previousIndexPath_];
        [tableView reloadRowsAtIndexPaths:indexPathArray withRowAnimation:UITableViewRowAnimationAutomatic];
    }
    else
    {
        // collapse previous cell
        if( previousCell != nil && [previousCell expandable] )
        {
            if( [previousCell expanded] ) [previousCell setExpanded:NO];
            NSArray *indexPathArray = [NSArray arrayWithObject:previousIndexPath_];
            [tableView reloadRowsAtIndexPaths:indexPathArray withRowAnimation:UITableViewRowAnimationAutomatic];
        }

        // expand new cell
        if( [cell expandable] )
        {
            [cell setExpanded:YES];
            NSArray *indexPathArray = [NSArray arrayWithObject:indexPath];
            [tableView reloadRowsAtIndexPaths:indexPathArray withRowAnimation:UITableViewRowAnimationAutomatic];
        }
    }

    previousIndexPath_ = indexPath;

    // works as expected, but I lose the animations
    //[tableView reloadData];

    // works as expected, but I lose the animations
    //[tableView beginUpdates];
    //[tableView endUpdates];
}

EDIT:更新为包括 cellForRowAtIndexPath 和 heightForRowAtIndexPath 方法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSUInteger section = [indexPath section];
    NSUInteger row = [indexPath row];
    JVCellSectionData *sectionData = [sections_ objectAtIndex:section]; // NSArray of SectionData objects
    NSArray *cellArray = [sectionData cells]; // NSArray of cells
    UITableViewCell *cell = [cellArray objectAtIndex:row];
    return cell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSUInteger section = [indexPath section];
    NSUInteger row = [indexPath row];
    JVCellSectionData *sectionData = [sections_ objectAtIndex:section];
    NSArray *cellArray = [sectionData cells];
    JVCell *cell = [cellArray objectAtIndex:row];
    return [cell cellHeight]; // changed when selected with setExpanded: method
}

Edit 2:我制作了一个 Quicktime 视频来记录所发生的事情并提取屏幕截图。

我试图做的是扩展单元格,而不是替换、插入或删除单元格。每个单元格都有一个或多个子视图。单元格的高度根据它是否“扩展”而变化。内容视图添加了子视图,并且其 ClipToBounds 属性为 YES。当单元格展开或折叠时,高度值会随着单元格的框架(包括背景视图和选定的背景视图)而变化。我记录了扩展之前、期间和之后的所有帧值,它们都与其状态和位置一致。

请记住,这在 iOS 4.3 上正常工作,如下所示:


我在模拟器中没有看到 iOS 5.0 和 4.3.2 之间的行为有任何差异,或者在我的手机上的 5.0 之间,单元格以相同的方式消失。 (我会在我的旧 iPod touch 上测试 4.2.1,但 Xcode 4 不能。Grr..)不过,看起来有一个简单的解决方法:如果您在展开/折叠单元格后同时执行 reloadRowsAtIndexPaths:withRowAnimation: 和然后 reloadData 调用之后,它似乎保留了动画。

Here's http://dl.dropbox.com/u/11290499/table.zip为此的一个小型演示项目。很难说真正的问题是什么——这只是 UIKit 执行单元格动画的一些奇怪的副作用。如果您子类化 [UITableViewCell setAlpha:],您可以看到表视图将单元格的 alpha 设置为 0 并将其保留在那里。诡异的。

编辑:嗯,这很奇怪。它有一段时间不起作用(正在执行旧的行为,细胞消失),但现在又正常了。也许我运行了错误的版本。无论如何,请告诉我这是否适合您。

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

展开表格视图单元格消失 的相关文章

  • 如何以编程方式更改 iPhone APN(接入点名称)?

    如何以编程方式更改 iPhone APN 接入点名称 或者强制 3G GPRS 连接以编程方式使用特定的 APN 无法通过 SDK 完成 第三方应用程序无法对硬件进行这种级别的控制 尤其是蜂窝调制解调器
  • iOS、通用链接、Swift。 continueUserActivity 未调用

    我正在为我们的 iOS 应用程序实现通用链接 这是我的一小部分 AppDelegate private func application application UIApplication openURL url URL sourceApp
  • 如何从 SDK 实现每个会话的 Google Places 自动完成功能?

    是否可以从 Android 和 iOS 应用程序的 place sdk 实现基于会话的自动完成 根据 6 月 11 日生效的新 Google 地图框架定价 对自动完成的请求可以分为基于击键 会话的请求 我找不到描述实施步骤的文档 除了这个参
  • Objective-C UILabel 作为超链接

    我正在尝试做一个UILabel一个链接UIWebView 我怎样才能做一个UILabel作为超链接 您可以使用 UITapGestureRecognizer 它将实现与您想要的类似的功能 UILabel myLabel UILabel al
  • ios swift parse:从 3 个类收集数据

    我有这样的结构 User CardSet 带有指向 User objectId 的指针 user 和 col name 带有点 cards 的卡片到 Card Set objectId 和列 name 我想选择所有卡数据 包括当前用户的卡集
  • dyld:无法加载插入的库

    当我尝试运行 UI 和单元测试时 出现异常 dyld 无法加载插入的库 private var containers Bundle Application AutoTestingApp app Frameworks IDEBundleInj
  • 为什么 iOS 启动屏幕很慢?

    我的 iOS 应用程序启动屏幕大约需要 3 5 秒 我有一张将在启动屏幕后加载的地图 我的用户必须等待启动屏幕加载 然后再等待 3 秒才能加载地图 有没有办法最大限度地减少启动屏幕时间 基本上这种延迟意味着you在启动过程中做了一些非常错误
  • iPhone - UIImage imageWithData 返回 nil

    我需要从字节数组创建 UIImage 现在我创建了字节数组 image CGImageCreateWithImageInRect aux CGImage imageRect context CGBitmapContextCreate dat
  • iOS 7 上 Safari 浏览器的用户代理

    我只想在带有 Safari 浏览器的 iPhone 和 iPod 中打开我的网站 对于 Chrome Dolphin 等任何其他浏览器 它不应该打开 但目前我从几乎所有设备获得相同的用户代理 对于Safari User Agent Stri
  • ReactiveCocoa 将 SignalProducers 合二为一

    我正在使用 ReactiveCocoa 并且我有几个 SignalProducers let center NSNotificationCenter defaultCenter let signalProducer1 center rac
  • UIView animateWithDuration:delay: 工作很奇怪

    我在使用 iPhone 动画块时遇到了一个奇怪的问题 这段代码 UIView animateWithDuration 2 delay 0 options 0 animations void controller setBackgroundC
  • 如何向标准 UIButton 添加徽章? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 是否可以在标准中添加看起来标准的徽章UIButton 如果不支持半原生 那么实现此目的最简单的方法是什么 示例图片 这是 Sascha
  • 图像作为电子邮件附件

    我想构建一个应用程序 我可以在电子邮件中附加图像 打开图像并将其设置为我的壁纸 我想让它跨平台 所以你能告诉我是否可以使用phonegap 或者我是否必须为iphone和android构建一个本机应用程序 您好 如果您只想通过电子邮件附加图
  • TableViewController 的 viewDidLoad 未触发

    我一直在关注这个tutorial http www appcoda com ios programming sidebar navigation menu 有一个滑出式菜单 我添加了一个 TableViewController 它将显示文章
  • 接收者'ClassName'是一个转发类,对应的@interface可能不存在

    我目前正在寻找一个UIPickerTable在 UIPickerView subviews 内 所以我循环并执行isKindOfClass UIPickerTable class 它有效 但由于 UIPickerTable 的标头未公开 我
  • 使用 MapKit 的地形和卫星视图

    我是 Mapkit View 的新手 当我给出没有目的地的纬度和经度时 我想显示 MapKit中是否可以通过地形 卫星视图来显示地图 有教程链接吗 我看过一些访问 Google 地图 API html 文件 的示例 有必要吗 或者您可以通过
  • 如何解决 Xcode 5 中的红色(已移动)文件?

    在 Xcode 4 中 当您要移动文件时 可以通过单击右侧菜单中的按钮并通过 Finder 选择新位置来解析文件的新位置 在 Xcode 5 中 右侧菜单中没有按钮 我还没有找到任何方法通过右键单击文件或顶部菜单栏选项来指定文件的新位置 在
  • UIView 圆角 - Swift 2.0?

    我会尝试将一些项目更新到 Swift 2 0 我有一个视图 左上角有一个圆角 在 Swift 没有警告 没有错误 只是没有圆角 这就是它在 Swift let maskPath UIBezierPath roundedRect conten
  • 叠加 SKScene 未显示

    我正在尝试将 SKScene 覆盖在 SCNScene 上 当我在模拟器和 iPhone6 上运行我的应用程序时 overlayScene SKScene 按预期显示 但是当我尝试在 iPhone5 上运行它 尝试了 2 个不同的设备 时
  • 模态转场需要点击 2 次而不是 1 次

    我的 UITableView 需要点击 2 次才能显示所选单元格的详细信息页面 一次用于选择 另一次用于显示详细信息视图 我希望有一个 CLI 直接显示所单击单元格的详细视图 我在 UITableViewManager m 中使用此方法的模

随机推荐

  • 使用寄存器值作为搜索模式

    我希望使用寄存器的内容作为 Vim 中的搜索模式 我想从命令行执行此操作 因此我无法使用
  • Spring - AOP:@within异常:java.lang.IllegalArgumentException:错误引用的类型不是注释类型

    我是 AOP 和 AspectJ 的新手 我正在尝试围绕具有元素类型的自定义注释编写自定义逻辑TYPE 我还想使用注释下的参数在 around 方法内编写自定义逻辑 我收到下面提到的错误 我尝试阅读多个来源 大多数来源都与使用有关 anno
  • 如何在单元格中显示当前用户名?

    在我能找到的大多数在线资源中 通常会告诉我如何在 VBA 中检索此信息 有没有直接的方法可以在单元格中获取这些信息 例如 简单如 ENVIRON User 这没有用 根据下面链接中的说明 执行以下操作 在 VBA 中插入一个新模块并粘贴以下
  • 使用 javamail 发送邮件不起作用

    我正在尝试使用我的 Gmail 地址发送电子邮件 我将 debug 设置为 true 这就是我得到的 DEBUG JavaMail version 1 4 1 DEBUG not loading file System Library Ja
  • 如何使用 heroku CLI 避免使用 --app 选项?

    我厌倦了每次运行时输入应用程序的名称heroku终端中的命令 heroku run rake db migrate app myapp heroku run rake db seed app myapp heroku run rake st
  • 离子闪屏(错误:无法读取上传的图像)

    我正在尝试使用 ionic resources splash 命令 我在资源文件夹以及 ios 和 android 文件夹的根目录中保存了一个 flash png 文件 其尺寸为 2208 x 2208 这是建议的大小 但是当我运行命令时出
  • 类别和继承有什么区别和用途? [复制]

    这个问题在这里已经有答案了 可能的重复 Objective c中继承和类别的区别 https stackoverflow com questions 522341 difference between inheritance and cat
  • JSON 数据到 Web 服务 - 如何定义预期的 JSON 数据

    我正在 PHP 中构建一个 RESTful Web 服务 接受 JSON 作为其有效负载 现在 我的问题是 如何向用户准确描述 JSON 请求的格式 我对 JSON 很陌生 不认为我 100 掌握了 其他用户系统基本上会创建一个包含我需要的
  • 重写 __add__ 方法后出现类型错误

    我想了解如何 add works class MyNum def init self num self num num def add self other return MyNum self num other num def str s
  • ASP.NET Core - 应用程序在发布后未连接到数据库

    我创建了一个带有用户身份验证的简单 ASP Net Core 应用程序 因此所有实体框架都已预加载到 Web 应用程序模板中 它正在连接到我的数据库connectionString位于我的appsettings json文件 与 data
  • 非贪婪正则表达式

    我需要像这样获取评论 php 文件中某些标签内的值 php code this is a comment
  • 是否准确地说旧版本的 Jetty 不能仅通过配置更改来与 Java 9 兼容

    尝试运行一个相当旧的项目Mamute https github com caelum mamute使用 Java 9 我能够通过使用来解决一些初始错误 add modules java xml bind 但 Mamute 使用旧版本的 Je
  • Java 包与文件夹结构?有什么不同

    我想知道用于 Java EE 开发的 Eclipse IDE 中使用的文件夹结构和包之间有什么区别 我们什么时候使用哪一个以及为什么 应该采取什么做法 创建一个像 src com utils 这样的文件夹结构 然后在其中创建一个类 创建一个
  • 如何使用PySpark读取目录下的Parquet文件?

    我在网上搜索了一下 网上提供的解决方案并没有解决我的问题 我正在尝试读取分层目录下的镶木地板文件 我收到以下错误 无法推断 Parquet 的架构 必须手动指定 我的目录结构如下 dbfs mnt sales region country
  • z3 中如何定义 Int 排序(SMT-LIB 2.0 Ints 理论)和动态声明排序?

    这是我使用 z3 执行的 SMT LIB 2 0 基准测试 set logic AUFLIA declare sort PZ 0 declare fun MS Int PZ Bool assert forall x Int exists X
  • React Native DEV 和 PROD 变量

    我如何知道我的 React Native 应用程序是在生产环境中运行还是在开发环境中运行 JavaScript 中有某种方式可以告诉我们吗 是否有传入的全局 您可以使用 DEV JavaScript 中的全局变量来确定您是否使用 React
  • 自己写魔法方法可以吗?

    在我的 Web 应用程序中 我经常需要将对象序列化为 JSON 默认情况下 并非所有对象都是 JSON 可序列化的 因此我使用自己的对象encode complex方法被传递给simplejson dumps如下 simplejson du
  • Three.js ObjectLoader 能够加载纹理吗?

    Three js 版本 0 0 70 blender 版本 2 73a 我有一个场景导出自blender to 三 js json格式使用新的io three not io three mesh 出口商 我可以使用以下命令将场景导入到 Th
  • 为什么允许在 for 循环中声明变量?

    我是一名目前在学校学习 java 的学生 初学者 我想知道一些事情 我有其他语言编码的基本知识 但我不了解 Java 中的特定内容 如果我要声明一个变量 让我们使用int作为一个例子 在循环内这是否意味着我一遍又一遍地声明相同的变量 这就是
  • 展开表格视图单元格消失

    我的单元格通过调用 setExpanded 方法更改其高度来扩展 然后 我调用 reloadRows At IndexPath 来刷新单元格 问题是细胞会消失并随机重新出现 我怀疑这与索引的工作方式有关 如果我调用 reloadData 或