我瞭解我發佈的問題已經討論了很多,但就我在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
}
http://stackoverflow.com/a/28813720/5097148 –