You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xcode 13.1编译项目iOS 15.0模拟器UITableView偶发cell消失问题

问题原因

这是Xcode 13.x版本构建项目运行在iOS 15系统时的已知UITableView渲染异常,多发生在多section、使用自动布局动态计算cell/区头区尾高度的场景,本质是系统层布局计算和渲染调度异常,导致部分cell未被正常绘制到视图层级,滚动时的复用逻辑会随机触发重新绘制所以会出现时有时无的情况。

可行解决方案
  • 方案1:关闭UITableView预估高度
    在App启动入口application:didFinishLaunchingWithOptions:中添加全局配置,全局生效:
// Objective-C 实现
if (@available(iOS 15.0, *)) {
    [UITableView appearance].estimatedRowHeight = 0;
    [UITableView appearance].estimatedSectionHeaderHeight = 0;
    [UITableView appearance].estimatedSectionFooterHeight = 0;
}
// Swift 实现
if #available(iOS 15.0, *) {
    UITableView.appearance().estimatedRowHeight = 0
    UITableView.appearance().estimatedSectionHeaderHeight = 0
    UITableView.appearance().estimatedSectionFooterHeight = 0
}

如果仅部分列表出现问题,也可以单独给对应UITableView实例设置上述三个属性为0即可。

  • 方案2:强制cell触发重绘
    若不想关闭预估高度特性,可以在自定义UITableViewCell的布局回调中强制触发重绘,代码如下:
// Objective-C 自定义Cell实现
- (void)layoutSubviews {
    [super layoutSubviews];
    [self setNeedsDisplay];
}
// Swift 自定义Cell实现
override func layoutSubviews() {
    super.layoutSubviews()
    setNeedsDisplay()
}
  • 方案3:修复模拟器兼容配置
    如果问题仅在iOS 15模拟器上出现,打开模拟器顶部菜单栏 Features > Reset Content and Settings 重置模拟器,再进入模拟器的设置 > 开发者 关闭Metal API Validation选项,重启模拟器后重新运行项目即可,该情况为Xcode 13版本模拟器Metal渲染引擎的适配bug。
  • 方案4:升级Xcode版本
    该bug已经在Xcode 13.3及后续版本被苹果官方修复,升级Xcode到13.3以上版本重新编译项目即可彻底解决该问题。

内容的提问来源于stack exchange,提问作者Chandan Kumar Jha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 03:54:10