| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- //
- // View+KeyboardAware.swift
- // LoopKitUI
- //
- // Created by Michael Pangburn on 7/22/20.
- // Copyright © 2020 LoopKit Authors. All rights reserved.
- //
- import SwiftUI
- // NOTE: In iOS 14, keyboard management is handled automatically in SwiftUI.
- extension View {
- public func onKeyboardStateChange(perform updateForKeyboardState: @escaping (_ keyboardHeight: Keyboard.State) -> Void) -> some View {
- onReceive(Keyboard.shared.$state, perform: updateForKeyboardState)
- }
- public func keyboardAware() -> some View {
- modifier(KeyboardAware())
- }
- }
- fileprivate struct KeyboardAware: ViewModifier {
- @State var keyboardHeight: CGFloat = 0
- func body(content: Content) -> some View {
- content
- .padding(.bottom, keyboardHeight)
- .edgesIgnoringSafeArea(keyboardHeight > 0 ? .bottom : [])
- .onKeyboardStateChange { state in
- if state.height == 0 {
- // Only animate the transition as the keyboard comes up; animating the opposite direction is jittery.
- self.keyboardHeight = 0
- } else {
- withAnimation(.easeInOut(duration: state.animationDuration)) {
- self.keyboardHeight = state.height
- }
- }
- }
- }
- }
|