iOS 16中TextField切换页面返回后未恢复初始位置求助
解决方案
这个问题的核心是:导航离开页面时,TextField仍保持聚焦状态,返回后系统未自动触发布局重置来恢复其初始位置。我们可以通过主动管理TextField的焦点状态来解决。
修改步骤:
- 添加
@FocusState属性跟踪TextField的聚焦状态 - 给TextField绑定该聚焦状态
- 触发导航时主动取消TextField的焦点
修改后的完整代码:
import SwiftUI struct ContentView: View { @State private var text: String = "Hello, world!" @FocusState private var isTextFieldFocused: Bool // 新增焦点状态管理 var body: some View { NavigationView { VStack { // 给NavigationLink添加点击事件,取消焦点 NavigationLink("Hello", destination: { Text("World") }) .onTapGesture { isTextFieldFocused = false } TextField("Whoops", text: $text) .focused($isTextFieldFocused) // 绑定焦点状态 } } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }
原理说明:
@FocusState是SwiftUI专门用于管理视图焦点的属性包装器,能精准控制TextField的聚焦状态- 点击NavigationLink时主动将
isTextFieldFocused设为false,强制TextField失去焦点,此时系统会自动重置布局,让TextField回到初始位置 - 返回原页面时,TextField处于非聚焦状态,自然保持在初始位置
内容的提问来源于stack exchange,提问作者Eamonn Moloney
相关产品推荐
相关产品推荐

