Search code examples
swiftxcodeswiftuigeometryreadersafearea

SwiftUI: Why is the height of proxy.safeAreaInsets.bottom equal to keyboardHeight?


So the safeAreaInset.bottom on the iPhone 11 Pro Max is 34.0, but when the keyboard is open, it changes the safeAreaInset.bottom to the height of the keyboard (346.0 points). Is there any way to access the safeAreaInset.bottom value (34.0) when the keyboard is open?

For reference, my content view has a geometry reader in it:

var body: some View {
    GeometryReader { proxy in
        //I pass in proxy into views in here and then access the safe area with proxy.safeAreaInsets.bottom
    }
}

I also need this to be adaptable across all devices, and it seems like making a bunch of if statements for the different devices is a pretty horrible solution. Anyone have suggestions?


Solution

  • Here is possible solution. Tested with Xcode 12 / iOS 14

    demo

    var body: some View
    {
        GeometryReader
        { gp in
            VStack
            {
                Text("Bottom: \(gp.safeAreaInsets.bottom)")
                Spacer()
                TextField("Value", text: $selection)
                Spacer()
            }
        }.ignoresSafeArea(.keyboard, edges: .bottom)     // << here !!
    }