SwiftUI Image在真机上显示异常旋转问题求助
解决PhotosPicker真机图片旋转异常问题
这个问题的核心原因是真机拍摄的照片包含EXIF方向元数据,而通过loadTransferable(type: Image.self)直接加载成SwiftUI的Image时,没有自动应用该方向信息;模拟器中的图片通常没有这类元数据,所以显示正常。
要修复这个问题,我们需要先将照片加载为UIImage(UIKit的图片类型会自动解析并应用EXIF方向),再转换为SwiftUI的Image。具体修改如下:
修改后的代码
首先需要导入UIKit:
import UIKit
然后替换原有的loadImage方法:
private func loadImage(from item: PhotosPickerItem?) async { guard let theItem = item else { return } do { // 先加载为Data,再转换为UIImage if let data = try await theItem.loadTransferable(type: Data.self), let uiImage = UIImage(data: data) { // UIImage已自动处理EXIF方向,直接转为SwiftUI Image theImage = Image(uiImage: uiImage) } } catch { print("Failed to load image: \(error)") } }
或者更直接地,直接加载为UIImage类型(iOS 16+支持):
private func loadImage(from item: PhotosPickerItem?) async { guard let theItem = item else { return } do { if let uiImage = try await theItem.loadTransferable(type: UIImage.self) { theImage = Image(uiImage: uiImage) } } catch { print("Failed to load image: \(error)") } }
关键说明
UIImage初始化时会自动读取照片的EXIF方向元数据,调整图片的显示方向,确保照片以正确角度展示。- 直接加载SwiftUI的
Image类型时,系统没有处理EXIF方向的逻辑,导致真机上出现旋转异常。
内容的提问来源于stack exchange,提问作者coco
相关产品推荐
相关产品推荐

