如何在macOS 10.15.7中使用SwiftUI获取并展示用户选定文件/文件夹的图标?
在macOS 10.15.7的SwiftUI中展示文件/文件夹的图标
嘿,我来帮你搞定这个需求!在macOS Catalina(10.15.7)的SwiftUI里获取并展示用户选定文件或文件夹的图标,其实可以借助NSWorkspace轻松实现,下面是具体的步骤和代码示例:
核心思路
我们需要通过NSWorkspace获取对应文件/文件夹的系统图标,再将AppKit的NSImage转换成SwiftUI的Image视图,最后调整尺寸适配你需要的侧边栏样式。
完整代码实现
struct FileIconSidebarView: View { @State private var selectedItemURL: URL? @State private var itemIcon: NSImage? var body: some View { HStack(alignment: .center) { // 展示图标(如果已选择文件/文件夹) if let icon = itemIcon { Image(nsImage: icon) .resizable() .frame(width: 16, height: 16) // 匹配Finder侧边栏默认图标大小 } // 文件选择按钮(实际项目里可集成到你的界面逻辑中) Button("选择文件/文件夹") { let openPanel = NSOpenPanel() openPanel.allowsMultipleSelection = false openPanel.canChooseDirectories = true openPanel.canChooseFiles = true if openPanel.runModal() == .OK { selectedItemURL = openPanel.urls.first loadItemIcon() } } } .padding(.vertical, 8) } private func loadItemIcon() { guard let itemURL = selectedItemURL else { return } let workspace = NSWorkspace.shared // 获取对应路径的图标 let icon = workspace.icon(forFile: itemURL.path) // 设置图标尺寸,和侧边栏风格对齐 icon.size = NSSize(width: 16, height: 16) itemIcon = icon } }
关键注意事项
- 沙箱权限配置:如果你的应用启用了沙箱,一定要在
Info.plist中添加com.apple.security.files.user-selected.read-only权限(如果需要写入操作则添加读写权限),否则无法访问用户选定的文件/文件夹。 - 自定义图标适配:如果目标文件/文件夹有用户设置的自定义图标,
NSWorkspace会自动返回对应的自定义图标,无需额外处理。 - 尺寸灵活调整:Finder侧边栏的图标默认是16pt,你可以根据自己的UI需求修改
icon.size和SwiftUI Image的frame参数来适配不同大小。
内容的提问来源于stack exchange,提问作者SaudiSheep
相关产品推荐
相关产品推荐

