The background of List
is moving when keyboard appears.
I have next implementation:
import SwiftUI
struct ListScroll: View {
// Test data
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() // moves with keyaboard
.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()
}
}
The problem is that when TextField
is in focus the keyboard moves Rectangle background regardless that it has .ignoresSafeArea(.all)
modifier.
It can be visible when the keyboard is hiding:
When the keyboard hided the part of the background jump back to origin position:
I tried to add .ignoresSafeArea(.keyboard)
modifier on List
. It resolve the issue but @FocuseState
not working with this modifier.
Video demo: dropbox link