PHPickerViewController无法显示照片 单元格呈透明可选中状态是什么原因?
PHPickerViewController 单元格透明问题成因
- 全局UIAppearance配置冲突:如果全局设置了
UICollectionViewCell的背景色为透明,PHPicker内部的照片展示单元格会继承该全局配置,预览图加载异常时就会呈现完全透明状态,是该问题最高发的诱因。 - 模态弹出样式配置异常:如果使用
overCurrentContext、overFullScreen这类带透传效果的modalPresentationStyle弹出PHPicker,且父视图存在半透明配置,会导致底层视图透显,看起来和单元格透明的表现一致。 - 受限照片权限适配问题:App仅申请了有限照片访问权限时,若权限列表发生变更后没有重新初始化PHPicker实例,会出现资源元数据加载异常,出现预览图无法渲染但可正常选中的问题。
- 系统版本固有bug:iOS 14.0~14.2版本的PHPicker存在原生渲染bug,设备内存不足时会偶发预览图加载失败,单元格呈现透明。

对应解决方案
- 限定全局UIAppearance的生效范围,针对PHPicker内部的单元格单独设置默认背景色:
// Swift 代码示例 UICollectionViewCell.appearance(whenContainedInInstancesOf: [PHPickerViewController.self]).backgroundColor = .systemBackground
// Objective-C 代码示例 [UICollectionViewCell appearanceWhenContainedInInstancesOfClasses:@[PHPickerViewController.class]].backgroundColor = [UIColor systemBackgroundColor];
- 弹出PHPicker时使用默认的
modalPresentationStyle = .automatic,避免使用over系列透传样式。 - 监听到有限照片权限变更后,销毁旧的PHPicker实例,重新初始化后再弹出。
- 针对iOS 14.2及以下版本做兼容处理,可降级使用UIImagePickerController,或提示用户升级系统版本。
内容的提问来源于stack exchange,提问作者Busu
相关产品推荐
相关产品推荐

