PHAuthorizationStatus为Limited时,PHPicker显示全部照片而非仅授权照片
解决Limited权限下PHPicker显示全部照片的问题
当应用处于PHAuthorizationStatus.limited权限状态时,使用默认的PHPickerConfiguration初始化选择器,会导致选择器展示系统相册中的全部照片,而非用户在LimitedLibraryPicker中授权的部分。你的现有代码如下:
private func openPHPicker() { DispatchQueue.main.async { [weak self] in var phPickerConfig = PHPickerConfiguration(photoLibrary: PHPhotoLibrary.shared()) phPickerConfig.selectionLimit = 1 let phPickerVC = PHPickerViewController(configuration: phPickerConfig) phPickerVC.delegate = self self?.present(phPickerVC, animated: true) } }
要实现仅展示授权照片的需求,需要基于用户授权的资产集合来配置PHPicker,具体修改如下:
private func openPHPicker() { DispatchQueue.main.async { [weak self] in let photoLibrary = PHPhotoLibrary.shared() var phPickerConfig: PHPickerConfiguration // 检查当前照片权限状态 switch PHPhotoLibrary.authorizationStatus(for: .readWrite) { case .limited: // 获取用户授权应用访问的资产集合 let authorizedAssets = photoLibrary.authorizedAssetsFetchResult() // 基于授权资产创建选择器配置 phPickerConfig = PHPickerConfiguration(fetchResult: authorizedAssets) default: // 其他权限状态使用默认配置 phPickerConfig = PHPickerConfiguration(photoLibrary: photoLibrary) } phPickerConfig.selectionLimit = 1 // 可选:限制仅展示图片(根据需求调整) phPickerConfig.filter = .images let phPickerVC = PHPickerViewController(configuration: phPickerConfig) phPickerVC.delegate = self self?.present(phPickerVC, animated: true) } }
关键说明
authorizedAssetsFetchResult()方法会返回用户在Limited权限下授权的所有资产,用它初始化的配置会让PHPicker仅加载这些内容。- 如果需要限定选择内容类型(比如仅图片),可以通过
filter = .images设置过滤规则。 - 该方案仅支持iOS 14及以上版本(
.limited权限为iOS 14新增特性),需确保应用部署目标符合要求。
内容的提问来源于stack exchange,提问作者Liubomyr Havronskiy
相关产品推荐
相关产品推荐

