nickcoding
nickcoding

Reputation: 475

edgesIgnoringSafeArea(.all) breaks keyboard responder, SwiftUI

Keyboard responder file looks like:

class KeyboardResponder: ObservableObject {

    @Published var currentHeight: CGFloat = 0

    var _center: NotificationCenter

    init(center: NotificationCenter = .default) {
        _center = center
        _center.addObserver(self, selector: #selector(keyBoardWillShow(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil)
        _center.addObserver(self, selector: #selector(keyBoardWillHide(notification:)), name: UIResponder.keyboardWillHideNotification, object: nil)
    }

    @objc func keyBoardWillShow(notification: Notification) {
        if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
            withAnimation {
                currentHeight = keyboardSize.height
            }
        }
        print("the KEYBOARD HEIGHT IS \(self.currentHeight)")
    }

    @objc func keyBoardWillHide(notification: Notification) {
        withAnimation {
            currentHeight = 0
        }
        print("the KEYBOARD HEIGHT IS \(self.currentHeight)")
    }
}

I try to use it in a view where the body is:

VStack {
    VStack {
        \\view content here
    }.offset(y: -self.keyboardResponder.currentHeight) \\ keyboardResponder is an instance of KeyboardResponder
}.edgesIgnoringSafeArea(.all)

When I remove edgesIgnoringSafeArea(.all) it works fine but if I put it in, it breaks the offset so it no longer moves the content at all...

Upvotes: 0

Views: 983

Answers (1)

Adam
Adam

Reputation: 5135

They deprecated .edgesIgnoreSafeArea in iOS 14. The new method has multiple options for the “types” of safe area to ignore: .container (the usual “safe area”), .keyboard (new!), and .all (ignores both container and keyboard — I suspect that’s the behavior you’re getting).

Try .ignoresSafeArea(.container) instead.

https://developer.apple.com/documentation/swiftui/offsetshape/ignoressafearea(_:edges:)

Upvotes: 5

Related Questions