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
相关产品推荐
相关产品推荐

