UITableViewCell 布局在重复使用单元格之前不会更新

2024-03-12

我有一个 UITableView,其中填充了自动调整大小的单元格。UITableView设置相当简单:

    tableView.estimatedRowHeight = 70
    tableView.rowHeight = UITableViewAutomaticDimension

就像苹果在这里推荐的那样:https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/WorkingwithSelf-SizingTableViewCells.html https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/WorkingwithSelf-SizingTableViewCells.html

要启用自动调整表格视图单元格大小,您必须设置表格视图的 UITableViewAutomaticDimension 的 rowHeight 属性。你还必须 为estimatedRowHeight 属性分配一个值。一旦两者 设置这些属性后,系统使用自动布局来计算 行的实际高度。

配置单元格时,我还禁用/启用一些约束以实现所需的外观。这就是事情变得有趣的地方。在重新使用单元之前,单元布局不会更新。字面上地。您可以致电layoutIfNeeded(), setNeedsLayout(), layoutSubviews()或任何其他方法,您都无法强制单元格更新其布局。

所有其他方面都工作得很好:标签确实会更改其文本,您可以隐藏/取消隐藏视图,但布局会卡住,直到重新使用单元格为止。

问题:是什么原因导致这种行为以及如何避免这种行为?


我也遇到了你的问题。而不是删除

tableView.estimatedRowHeight = 70

我刚刚在 cellForRow 方法的末尾添加了一个layoutIfNeeded,就在返回单元格本身之前:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "identifier", for: indexPath) as? MyCustomCell
    ...
    cell?.layoutIfNeeded()
    return cell!
}

结果:单元布局始终完美,无论是第一次还是每次重复使用后。

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

UITableViewCell 布局在重复使用单元格之前不会更新 的相关文章

  • 添加滑动删除UITableViewCell

    我正在制作一个清单应用程序UITableView 我想知道如何添加滑动删除UITableViewCell 这是我的 ViewController swift import UIKit class ViewController UIViewC
  • iTunes connect - 在哪里可以查看 TestFlight 版本的崩溃报告?

    我有一个应用程序正在 iTunes 连接上通过 TestFlight 进行测试 其中一台测试设备不断崩溃 我很确定 itunes connect 上应该有崩溃日志 但我在 testflight 版本中找不到任何崩溃日志 有谁知道在哪里可以找
  • 金属顶点着色器绘制纹理的点

    我想执行 Metal 或 OpenGLES 3 0 着色器 通过混合绘制点基元 为此 我需要将纹理的所有像素坐标作为顶点传递给顶点着色器 该顶点计算要传递给片段着色器的顶点的位置 片段着色器仅输出启用混合的点的颜色 我的问题是 是否有一种有
  • 如何在 uiview 中添加边框?

    我有一个 uiview 我想在这个 UIVIew 旁边添加一个边框 大约占 UIView 的 75 任何人都可以帮忙解决这个问题吗 我可以找到将边界绘制到外面的解决方案 好吧 不只是可以设置一个小属性来将边框与外部对齐 它向内部对齐绘制 因
  • iOS 11 文件提供程序扩展中的项目

    我有一个带有文件提供程序扩展名的应用程序 我尝试使用此方法为 ios 11 的新文件应用程序提供支持link https developer apple com documentation fileprovider content and
  • dispatch_time 和dispatch_walltime 之间有什么区别?在什么情况下最好使用其中之一?

    我知道dispatch time是根据设备时钟的时间 如果设备进入睡眠状态 时钟也会睡眠 另一方面dipatch walltime是根据挂钟的时间 它永远不会睡觉 我的问题是 在不同情况下使用其中一种或另一种 在性能方面或其他方面有什么区别
  • 关闭所有 React Native 输入上的 autoCapitalize (iOS)

    我的大部分输入仅在 iOS 上自动大写 我知道有自动大写 https facebook github io react native docs textinput html autocapitalize我可以在每个输入上将其设置为 fals
  • 将应用程序委托定义为常量?

    我正在尝试编写 iPhone 应用程序 但遇到了问题 我已经在类中声明了一个常量作为应用程序委托 define ikub iKubMobileAppDelegate UIApplication sharedApplication deleg
  • 如何在 UIBarButtonItem 上触发高亮效果

    当您点击UIBarButtonItem in a UIToolbar 有白光效果 是否有可能触发一个事件来显示这种效果 我不想按按钮 只应显示效果 我想向用户展示该按钮后面有新内容 感谢您的帮助 这是 highlight png 我不是在开
  • 如何在 CALayer 中绘制径向渐变?

    I know CAGradientLayer目前不支持径向渐变 只能选择kCAGradientLayerAxial 我想要如下所示的东西 我环顾四周寻找这个问题 发现有一种方法可以解决这个问题 但我并不清楚这些解释 所以我想知道是否可以使用
  • iPhone 相机访问权限?

    我想知道如何访问 iPhone 相机并实时使用它 例如 仅在相机视图上绘图 另一个相关问题 可以显示吗同时 4 个摄像机视图就像 Mac 上的 Photo Booth 一样 您可以使用 AVFoundation 来做到这一点 void in
  • 在 iOS 上的 PhoneGap 或 Cleaver (Cordova) 中加载远程 html

    我在我的本机 iOS 6 应用程序中使用 Cordova 2 4 组件 Cleaver 和嵌入式视图 到目前为止 我已经成功创建了项目结构 链接了 Cordova 库并设置了 Hello World 应用程序 该应用程序确实可以提供 设备就
  • 如何捕获 UITextField 文本的变化?

    我查看了所有类似的问题 它们与我所问的不同 我需要捕捉 UITextField 中实际文本的变化 而不仅仅是编辑状态 当视图加载时 它将成为第一响应者 我需要知道何时输入文本 以便我可以在导航栏中启用 下一步 如果可以的话请帮助我 这确实阻
  • UINavigationController如何设置标题

    我有一个用于通用项目列表的控制器 视图 可以扩展它以显示自定义列表 列表和导航工作正常 但我无法更改 UINavigationController 的标题 在通用控制器中 void viewDidLoad super viewDidLoad
  • 不使用 renderInContext 捕获 UIView:

    我想从我的屏幕创建视频 为此我将捕获视图 但我不想使用renderInContext 由于某种原因 我现在正在使用drawViewHierarchyInRect 但这仅限于 iOS 7 我的应用程序也支持早期的 iO S 版本 我会因使用而
  • iOS safari 输入插入符号颜色

    我在 iPhone 设备上使用 Safari 时遇到了一个 CSS 小问题 我的搜索输入是蓝色的 当用户关注它时 插入符号几乎看不见 在所有桌面浏览器中 它都有正确的颜色 白色 即使在桌面 Safari 上也是如此 知道如何修复此问题并更改
  • 在 CAKeyFrameAnimation 期间检测碰撞

    当一个 UIImageView 在 CAKeyFrameAnimation 期间沿一条路径行进时 是否可以检测到两个 UIImageView 的碰撞 如果是这样 这是如何完成的 我尝试了多种方法 包括在动画期间检查 CGRect 是否发生碰
  • iOS - 支持 iPad 和 iPhone,无需使用笔尖

    我正在尝试编写一个应用程序而不使用nib 一切我都会以编程方式完成 现在的问题是 我该如何支持两者iPad and iPhone 显然 我不能这样做 if UIDevice currentDevice userInterfaceIdiom
  • 如何按月对获取的日期进行分组

    我将数据插入到日期类型的核心数据中 但是当我尝试从数据库中获取数据时 我无法按月对它们进行分组 您可以找到我尝试解决方案的代码 但它不起作用 let groupedDict Dictionary grouping self lessons
  • 如何修复 iOS 11 和 macOS V10.12 Safari 上损坏的变换原点?

    我正在尝试使用 svg 来实现 CSS 动画 我期望 2 个 svg 盒子正在旋转 旋转 transform origin center center 360度 看起来它在 Chrome 和 Firefox 上的表现符合我的预期 但在 ma

随机推荐

  • 什么算作解析请求?

    由于条款的更改 Parse 现在限制了每秒的请求数量 这是一件好事 但是 Parse Push 和 Parse Analytics 算作请求吗 每当您通过 iOS Android JavaScript Windows Xamarin Uni
  • 在非 Metro 应用程序中使用自定义 Windows 运行时组件

    想象一个场景 您有一个复杂的 WinRT 代码框架 您希望从 C Metro 应用程序和 C 桌面应用程序访问该框架 有没有办法将 WinMD 包含在非 Metro 应用程序中 UPDATE 这仅适用于 Windows 8 Microsof
  • 在 C# 中将数据表转换为 JSON

    我想将记录从数据库获取到DataTable 然后转换DataTable转换为 JSON 对象 将 JSON 对象返回到我的 JavaScript 函数 I use this https stackoverflow com questions
  • phpMyAdmin + CentOS 6.0 - 禁止

    当我想访问我的 phpMyAdmin 时 我总是收到此消息 w3m localhost phpmyadmin Forbidden You don t have permission to access phpmyadmin on this
  • 从 angularjs 指令触发点击事件

    如何触发 li 元素的点击事件 并从 angularjs 指令指定其索引 我尝试使用 first 来触发第一个元素的点击 但它不起作用 谢谢你的帮助 这也许是您实现这一目标的另一种方法 将索引和项目传递给指令 并让指令在模板中设置 html
  • 解构神奇宝贝故障?

    如果这是问这个问题的错误地方 我深表歉意 我认为这肯定与编程相关 但如果这属于其他网站 请告诉我 我从小就玩神奇宝贝红和蓝 这些游戏非常有趣 但因存在许多可利用的故障而臭名昭著 例如 请参阅这个游戏的荒谬的速通 http www youtu
  • 从一组 ActiveX 选项按钮返回索引值

    首先我要声明我是一名医学生 而不是程序员 我编写了一个电子表格 可以作为包含 50 个问题的考试 每个问题都有 15 个多项选择答案 我使用 ActiveX 选项按钮将其分组到每个问题编号 我使用 Activex 而不是表单选项按钮 因为我
  • Java导入会很慢吗? [复制]

    这个问题在这里已经有答案了 import package 比 import package MyClass 慢吗 如果是 在哪种情况下 运行时还是编译 import package 编译时可能会更慢 如果该包中定义了很多东西 它也会降低 I
  • CSS 背景精灵对于 iPhone 来说太大

    我有一个用于 css 背景的精灵表 尺寸为 2000x2000 像素 在所有桌面浏览器中都可以正常工作 但在 iPhone 版 Safari 上则完全不渲染 将尺寸降低到 1000x1000 可以完美渲染 好吧 除了我现在错过了精灵表的四分
  • 如何设置jquery按钮的活动状态

    我有一个使用 jquery 按钮的正确导航 如果用户点击它 页面就会加载 我需要的是 一旦页面重新加载 按钮应该显示它已被选中 如何使用 jquery 按钮执行此操作 为什么不使用 jQuery UI Tab 小部件 您也可以尝试使用按钮集
  • DataGridView:仅当滚动到底部时自动向下滚动

    我有一个程序 它使用 dataGridView 来显示通过向 dataGridView 添加行来每秒自动更新的数据 当我想在开头阅读一些内容时 我会向上滚动 即使数据更新 滚动条也不会向下滚动 这很好 但我希望滚动条仅在位于 dataGri
  • 如何在 LibreOffice 中运行 python 宏?

    当我去工具 gt 宏 gt 组织宏 gt Python我得到这个对话框 It is 不可能创建新的 Python 宏 显然 LibreOffice 有没有Python编辑器所以我必须在其他地方编写宏 然后执行它们 但是我不知道where放置
  • 我不断收到此错误:“阅读器关闭时调用 Read 的尝试无效”

    这是我的代码 我关闭并打开阅读器 但它仍然无法工作 几个线程可以同时访问这个函数 但是有一个锁 它一开始会工作几次 但迟早我会收到异常 阅读器关闭时调用 Read 的尝试无效 private IList
  • 在 El Capitan 10.11.6 上安装 Tensorflow 1.10

    我试图在我的旧Mac上安装tensorflow 1 10 但每次都会遇到同样的问题 一旦我启动 python shell 我就会收到以下错误 我确实尝试先将其安装在 virtualenv 中 之后 我尝试仅使用 pip 安装它并得到相同的错
  • Tempus Dominus Bootstrap4 需要 moment.js。 (日期时间选择器)

    我正在尝试使用 Tempus Dominus Bootstrap4 添加 DateTimePicker 但我收到以下错误 I use Laravel as a front end So I use laravel mix 我的刀片文件在下面
  • .htaccess 重写规则中的模式干扰

    在 htaccess 中定义重写规则时 我遇到了模式干扰问题 我试图重写的网站链接是 example com item work gt example com work example com item work tile x gt exa
  • 使用 ActiveAdmin 进行多步骤表单?

    是否可以使用 ActiveAdmin 创建多步骤表单 如果没有 是否可以在提交表单后添加另一个重定向到的页面 不是默认索引 显示或表单页面 我自己也一直在苦恼这个问题 我发现您可以使用 ActiveAdmin 文件中的集合操作添加自己的页面
  • Gwt 2.8-rc1 超级开发模式不适用于 IntelliJ IDEA 2016.2.5

    我的项目在超级开发模式下使用 GWT 2 7 和 2 8 beta1 正确启动 不幸的是 自 2 8 rc1 发布以来 它没有启动 看起来 GWT 项目依赖项配置不正确 IDE IntelliJ IDEA 2016 2 5 C Progra
  • 如何在 karma angularjs 中对 setInterval 进行单元测试

    app directive shuffleBlocks function timeout return link function sco ele att if itemCnt lt 1 return Trigger function fu
  • UITableViewCell 布局在重复使用单元格之前不会更新

    我有一个 UITableView 其中填充了自动调整大小的单元格 UITableView设置相当简单 tableView estimatedRowHeight 70 tableView rowHeight UITableViewAutoma