Xcode 13中MenuPickerStyle样式Picker选中值不显示如何解决
问题原因
Xcode 13 对 MenuPickerStyle 的内部渲染逻辑做了调整,默认不再监听 selection 绑定值的变化主动刷新 Picker 的标签内容,因此会出现选中属性后按钮文本不更新的问题。
解决方案
方案1:添加id修饰符触发重绘
仅需要给现有 Picker 新增 id() 修饰符,绑定选中属性 attribute,只要属性值发生变化就会触发 Picker 整体重绘,即可正常更新标签显示,修改成本最低:
Picker(selection: $attribute, label: Text(NSLocalizedString("Attribute: ", comment: "") + "\(attribute)")){ ForEach(attributes, id: \.self){ Text($0) } } .pickerStyle(MenuPickerStyle()) .id(attribute) // 新增该行代码
方案2:使用Menu自定义实现
如果需要更高的兼容性和自定义空间,可以直接用 Menu 组件自行构建,完全自主控制标签的刷新逻辑:
Menu { Picker("", selection: $attribute) { ForEach(attributes, id: \.self){ Text($0) } } } label: { Text(NSLocalizedString("Attribute: ", comment: "") + "\(attribute)") }
两种方案均可恢复旧版本的显示效果,选中属性后实时展示在按钮旁。
内容的提问来源于stack exchange,提问作者ruzaykina
相关产品推荐
相关产品推荐

