SwiftUI:TextField获焦时背景随键盘移位问题求助
SwiftUI键盘弹出时背景随List移位的问题
当TextField获取焦点弹出键盘时,即便给背景Rectangle添加了.ignoresSafeArea(.all)修饰符,背景仍会跟随List向上移位,这个问题在键盘收起时表现得尤为明显——键盘收起过程中背景保持移位状态,完全收起后才跳回原始位置。
我曾尝试给List添加.ignoresSafeArea(.keyboard)修饰符,虽然解决了背景移位的问题,但导致@FocusState功能失效。
实现代码
import SwiftUI struct ListScroll: View { // 测试数据 let data = [ User(id: UUID(), name: "Yevhen", age: 35), User(id: UUID(), name: "Petro", age: 55), User(id: UUID(), name: "Djohn", age: 22), User(id: UUID(), name: "sad", age: 22), User(id: UUID(), name: "Asd", age: 22), User(id: UUID(), name: "Asdd", age: 22), User(id: UUID(), name: "Asd", age: 22), User(id: UUID(), name: "dasds", age: 22), User(id: UUID(), name: "asds", age: 22), User(id: UUID(), name: "das", age: 22), User(id: UUID(), name: "dsa", age: 22), User(id: UUID(), name: "das", age: 22), User(id: UUID(), name: "fdkn", age: 22), User(id: UUID(), name: "dsjn", age: 22), User(id: UUID(), name: "ddsasd", age: 22), User(id: UUID(), name: "asass", age: 22), User(id: UUID(), name: "ASD", age: 22), User(id: UUID(), name: "ASDS", age: 22), User(id: UUID(), name: "ASDS", age: 22), User(id: UUID(), name: "ASDS", age: 22), User(id: UUID(), name: "ASDS", age: 22), User(id: UUID(), name: "ASDS", age: 22), User(id: UUID(), name: "ASDS", age: 22), User(id: UUID(), name: "ASDS", age: 22), ] @State var text = "Testing text" @FocusState var focusedTask: User.ID? var body: some View { ZStack { Rectangle() // 随键盘移动的背景 .fill(.linearGradient(.init(colors: [.red, .blue, .orange]), startPoint: .topLeading, endPoint: .bottomTrailing)) .ignoresSafeArea(.all) ScrollViewReader { scrollReader in List(data, id: \.self.id) { user in VStack { TextField("", text: $text ) .textFieldStyle(.roundedBorder) .listRowSeparator(.hidden) .listRowBackground(Color.clear) .focused($focusedTask, equals: user.id) } } .scrollDismissesKeyboard(.immediately) .scrollContentBackground(.hidden) } } } } struct ListScroll_Previews: PreviewProvider { static var previews: some View { ListScroll() } }
现象说明
- 键盘弹出时:背景与List一同向上移位
- 键盘完全收起后:背景恢复至初始位置
内容的提问来源于stack exchange,提问作者Yevgen Sukhomud
相关产品推荐
相关产品推荐

