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

iOS录屏时UITableViewCell中UILabel文本被截断问题

解决iOS录屏时UITableViewCell内多行UILabel文本截断问题

问题根源

iOS 17.14.1开启系统录屏时,系统资源调度和渲染路径发生变化,导致UITableView自动布局的高度计算时机异常,UILabel的文本尺寸未同步更新,最终出现文本截断。

解决方案

  • 强制UILabel布局时更新尺寸计算
    在自定义UITableViewCell中重写layoutSubviews方法,确保UILabel基于当前实际宽度重新计算文本高度:

    override func layoutSubviews() {
        super.layoutSubviews()
        contentLabel.preferredMaxLayoutWidth = contentLabel.bounds.width
        contentLabel.invalidateIntrinsicContentSize()
        super.layoutSubviews()
    }
    

    该操作能让UILabel在每次布局时,基于当前可用宽度刷新固有尺寸,避免录屏时尺寸计算滞后。

  • 优化UITableView自动高度配置
    不要仅依赖UITableView.automaticDimension,同时设置接近实际内容的estimatedRowHeight,避免系统用默认估计值导致高度计算偏差:

    tableView.rowHeight = UITableView.automaticDimension
    tableView.estimatedRowHeight = 120 // 根据你的内容平均高度调整
    

    另外在cell配置逻辑中,提前设置preferredMaxLayoutWidth(适配xib/storyboard或纯代码布局):

    func setupContent(with text: String) {
        contentLabel.text = text
        // 假设contentView左右各16pt间距
        contentLabel.preferredMaxLayoutWidth = contentView.bounds.width - 32
    }
    
  • 关闭UILabel字体自动收缩
    如果开启了adjustsFontSizeToFitWidth,录屏时可能触发字体收缩导致文本显示异常,直接关闭该属性:

    contentLabel.adjustsFontSizeToFitWidth = false
    
  • 监听录屏状态刷新可见Cell
    通过系统通知监听录屏状态变化,手动刷新可见Cell,强制重新计算布局:

    // 在ViewController的viewDidLoad中添加监听
    NotificationCenter.default.addObserver(self, selector: #selector(refreshVisibleCells), name: UIScreen.capturedDidChangeNotification, object: nil)
    
    @objc private func refreshVisibleCells() {
        guard let visiblePaths = tableView.indexPathsForVisibleRows else { return }
        tableView.reloadRows(at: visiblePaths, with: .automatic)
    }
    

内容的提问来源于stack exchange,提问作者Dhaval Vasundhara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 20:02:41