Hallo,
ich habe mal folgendes Script für eine Einkaufsliste erstellt:
Alles anzeigen
Die zwei Listen, welche zum einen die zu kaufenden Artikel und zum anderen die zuvor gekauften Artikel anzeigen, habe ich als Views ausgelagert. Eigentlich wollte ich erreichen, dass mein Layout bleibt wie es ist und das Erscheinen des Keyboards sich entweder über die unteren Listen legt oder zumindest den Inhalt des Views nicht so weit nach oben schiebt, dass das TextField verschwindet. Aber das habe ich nicht hinbekommen. Dies hier ist die Notlösung, welche die ScrollView einfach ausblendet wenn das Keyboard erscheint. Ist aber unschön, das das TextField dann nach unten in die Mitte des Screens rutscht.
Hat jemand ein paar Tipps für mich, wie man elegant die View Elemente und / oder das Keyboard steuern kann, so dass man immer die volle Kontrolle über das Layout behält, wenn das Keyboard erscheint?
Danke!
ich habe mal folgendes Script für eine Einkaufsliste erstellt:
Quellcode
- import SwiftUI
- import SwiftData
- // Main view for shopping list
- struct ContentView: View {
- @Environment(\.modelContext) private var modelContext: ModelContext
- @State private var filteredSuggestions: [String] = []
- @StateObject var dataManager = ShopDataManager()
- @State private var newItem: String = ""
- @State private var keyboardVisible: Bool = false
- private func setupKeyboardObservers() {
- NotificationCenter.default.addObserver(forName: UIResponder.keyboardWillShowNotification, object: nil, queue: .main) { _ in
- keyboardVisible = true
- }
- NotificationCenter.default.addObserver(forName: UIResponder.keyboardWillHideNotification, object: nil, queue: .main) { _ in
- keyboardVisible = false
- }
- }
- var body: some View {
- NavigationStack {
- ZStack {
- // Background image
- Image(.image2)
- .resizable()
- .scaledToFill()
- .edgesIgnoringSafeArea(.all)
- VStack(spacing: 16) {
- // Input text field for items to buy
- NewItemInputView(
- dataManager: dataManager, newItem: $newItem, filteredSuggestions: $filteredSuggestions
- )
- // Scroll view holding the lists for the items
- if !keyboardVisible {
- ScrollView {
- VStack(spacing: 0) {
- ShopItemsView(dataManager: dataManager)
- BoughtItemsView(dataManager: dataManager)
- }
- }
- }
- }
- .padding(.top)
- }
- .navigationTitle("Shopping List")
- .navigationBarTitleDisplayMode(.inline)
- .onAppear {
- setupKeyboardObservers()
- }
- }
- }
- }
- #Preview {
- ContentView()
- }
Hat jemand ein paar Tipps für mich, wie man elegant die View Elemente und / oder das Keyboard steuern kann, so dass man immer die volle Kontrolle über das Layout behält, wenn das Keyboard erscheint?
Danke!