[英]Flutter - Textfield not showing up when keyboard appears on android
[英]Showing Textfield when Keyboard is up
我知道我發布的問題已經討論了很多,但是就我在SO中搜索而言,我找不到針對我問題的解決方案。 我將其發布以獲取一些輸入。
問題:
視圖層次結構:視圖->滾動視圖->視圖->文本字段
我實現了兩個屏幕,在滾動視圖的頂部放置了多個文本字段,以避免當鍵盤位於頁面底部時鍵盤遮擋該文本字段。 我使用Apple提供的示例代碼進行了少量修改就實現了這一目標。
UIKeyboardWillShowNotification
和UIKeyboardWillHideNotification
userInfo
字典中獲取鍵盤的高度,並設置適當的內容插圖以將文本字段移至鍵盤上方 UIEdgeInsetZero
以恢復為正常大小 當有更多文本字段可以占據整個屏幕時,上述實現效果很好(假設有10個文本字段並且它們超出了滾動視圖的框架)。 每當我點擊一個文本字段時,它就會按預期的那樣在鍵盤上方移動,並且我也可以滾動頁面,直到在鍵盤框架上方(當鍵盤仍在上時)最底部的文本字段可見。
當我在scrollview中只有兩個文本字段在屏幕上垂直居中時,就會出現我的問題。 當我點擊一個文本字段時,滾動視圖會獲得一個相當於鍵盤高度的插圖,並且按預期方式會移動到鍵盤上方,但是當我滾動屏幕時,我會在文本字段下方看到一個巨大的空白(由於附加的插圖)。
當頁面中只有一個或兩個文本字段時,如何避免該空白? 我是否必須編寫其他邏輯來處理這種情況? 任何幫助,將不勝感激。
下面是代碼:
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillShow:", name: UIKeyboardWillShowNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillHide:", name: UIKeyboardWillHideNotification, object: nil)
}
func keyboardWillShow(notification: NSNotification) {
if let userInfo = notification.userInfo {
let keyboardFrame = (userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.CGRectValue()
if let kbFrame = keyboardFrame {
let inset = CGRectGetHeight(kbFrame)
scrollView.contentInset = UIEdgeInsetsMake(0, 0, inset, 0)
scrollView.scrollIndicatorInsets = UIEdgeInsetsMake(0, 0, inset, 0)
}
}
}
func keyboardWillHide(notfication: NSNotification) {
scrollView.contentInset = UIEdgeInsetsZero
scrollView.scrollIndicatorInsets = UIEdgeInsetsZero
}
TPKeyboardAvoidingScrollView很好,但是我最近切換到了IQKeyboardManager-> https://github.com/hackiftekhar/IQKeyboardManager
它由您選擇,但我更喜歡IQKeyboardManager使其易於使用
有很多解決方案,但是我的首選解決方案是使用TPKeyboardAvoiding 。 要在這里使用它,只需將您的UIScrollView
TPKeyboardAvoidingScrollView
為SB或代碼中TPKeyboardAvoidingScrollView
的實例或子類,它就應該處理其余的事情,不需要其他代碼!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.