You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 08:19:58