macOS13下SwiftUI Picker菜单中自定义图片无法调整尺寸问题
这是macOS 13 SwiftUI的固有行为:采用.menu样式的Picker会强制统一菜单项的图标布局规则,本地资源图片(PNG/SVG)的resizable和frame设置会被忽略,而系统图标(systemImage)因为适配了系统图标规格,所以能正常响应尺寸调整。
解决方案
1. 用自定义Menu替代Picker(推荐)
自定义Menu可以完全控制内部视图的尺寸,不受系统Picker的布局限制:
@State private var selectedItemId = "" Menu { Button(action: { selectedItemId = "country" }) { HStack { Image("icon-descriptor-country") .resizable() .scaledToFit() .frame(width: 16, height: 16) Text("Country...") } } // 添加其他菜单项 } label: { HStack { Image("icon-descriptor-country") .resizable() .scaledToFit() .frame(width: 16, height: 16) Text(selectedItemId.isEmpty ? "Country..." : selectedItemId) } }
2. 尝试调整Picker内图片的渲染属性(兼容性一般)
如果坚持使用Picker,可以尝试给图片添加.fixedSize(),部分场景下能强制应用尺寸设置,但稳定性不如自定义Menu:
Picker("", selection: $selectedItemId) { HStack { Image("icon-descriptor-country") .resizable() .scaledToFit() .frame(width: 16, height: 16) .fixedSize() Text("Country...") } } .pickerStyle(.menu)
总结
macOS 13的Picker .menu样式对本地图片的尺寸控制存在限制,自定义Menu是当前版本下最可靠的替代方案,后续系统更新可能修复该问题。
内容的提问来源于stack exchange,提问作者alex.bour
相关产品推荐
相关产品推荐

