在 iOS 的開發過程之中,難免會碰到一個狀況,那便是 UITextField/ UITextView 被鍵盤所遮住了⌨️ 在 UIKit 之下,多數人會使用套件來做全域的處理,如 IQKeyboardManager 就是一個十分經典的解決方案。
來說說 SwiftUI 上的鍵盤處理方式
在 SwiftUI 上,我們也可以很優雅地處理這一塊,如在 List
元件中,只需要分別監聽 UIWindow.keyboardWillShowNotification
和 UIWindow.keyboardWillHideNotification
,以及加上個 .animation(.default)
來優化使用者體驗。
var body: some View {
List(viewModel.rowModels, rowContent: DemoRow.init)
.padding(EdgeInsets(top: 0, leading: 0, bottom: bottomPadding, trailing: 0))
.onReceive(NotificationCenter.default.publisher(for: UIWindow.keyboardWillShowNotification),
perform: updateFrame)
.onReceive(NotificationCenter.default.publisher(for: UIWindow.keyboardWillHideNotification),
perform: updateFrame)
.animation(.default)
}
完整的 struct 可以在 GitHub 上查看👍
成果動畫
有任何問題歡迎在底下留言👏有寫法上的建議可以直接在 GitHub 上反應👍 有想看看一些廢話的話則是可以在 Twitter 直接找到我喔!😂