如何展示仅显示用户已授权照片的PHPickerViewController选择器
iOS 14+ 调起仅展示已授权照片的PHPickerViewController方案
核心原理
默认初始化的PHPickerViewController走系统独立沙箱进程,不受App的照片访问权限限制,始终展示全量照片。要限制仅展示用户已授权的资源,需要将选择器与当前App的PHPhotoLibrary实例绑定,匹配当前的权限范围。
实现步骤
- 第一步:导入依赖框架
import Photos import PhotosUI
- 第二步:确认当前照片访问权限状态
只有当权限状态为PHAuthorizationStatus.limited(限选访问)时,才会触发「仅展示已授权照片」的效果,其他权限状态下会按规则展示全量照片/无权限提示
let status = PHPhotoLibrary.authorizationStatus(for: .readWrite) // 仅当当前是限选权限时才有「已授权照片」的范围,可先主动申请限选权限 if status == .notDetermined { PHPhotoLibrary.requestAuthorization(for: .readWrite) { newStatus in // 权限回调后再调起选择器 } }
- 第三步:初始化绑定了当前照片库实例的PHPicker配置
注意不能用默认的
PHPickerConfiguration()初始化,必须传入PHPhotoLibrary.shared()
// 核心:关联当前App的PHPhotoLibrary实例,自动匹配权限范围 var config = PHPickerConfiguration(photoLibrary: PHPhotoLibrary.shared()) // 可自定义选择类型、数量等参数 config.filter = .images config.selectionLimit = 1 let picker = PHPickerViewController(configuration: config) picker.delegate = self present(picker, animated: true)
额外说明
- 限选权限下用该方式调起的选择器,右下角会自带「管理」按钮,用户可直接调整授权给App的照片范围,无需跳转系统设置
- 若App已获得完全访问权限(状态为
.authorized),该配置的选择器仍会展示所有照片 - 该方式无需额外申请全量照片权限,符合苹果隐私合规要求
内容的提问来源于stack exchange,提问作者jfredsilva
相关产品推荐
相关产品推荐

