为何绑定AppStorage变量时GeometryReader会导致Stepper等控件失效?
iPadOS 16.5后GeometryReader与AppStorage绑定控件的交互故障
当视图外层使用GeometryReader,且内部包含绑定到@AppStorage变量的Stepper、Toggle等控件时,这些控件会出现无法正常响应操作的问题。移除GeometryReader,或者改用@State变量替代@AppStorage后,控件即可恢复正常功能。该问题此前未出现,推测是iPadOS 16.5版本更新后引入的故障。
临时解决方案
- 若无需持久化存储变量,可将
@AppStorage替换为@State变量 - 调整布局结构,避免
GeometryReader直接包裹包含绑定控件的视图层级(例如将GeometryReader的使用移至内部子视图,而非作为最外层容器)
示例代码
import SwiftUI struct ContentView: View { /* 修复Stepper功能的两种方式: 1. 注释掉@AppStorage的stepperValue,取消注释@State的stepperValue 2. 注释掉所有GeometryReader相关代码 (但这样会破坏“占满整个垂直视口”的需求) */ @AppStorage("stepperValue") var stepperValue = 5 //@State var stepperValue = 5 var body: some View { GeometryReader { reader in ScrollView { ZStack { Rectangle() .fill(.blue.gradient) .frame(minHeight: reader.size.height) VStack { Stepper(value: $stepperValue, in: 1...10) { Text("数值:\t \(stepperValue)").font(.title3) } }.padding() } } } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }
内容的提问来源于stack exchange,提问作者Jace
相关产品推荐
相关产品推荐

