2017-08-05 94 views
1

我想在用戶打字時在鍵盤上方移動一個堆棧視圖。我使用下面的代碼來獲取鍵盤的高度(取自Move view with keyboard using Swift)。鍵盤高度0

第一次出現鍵盤時,代碼有效,keyboardSize.height打印出來爲226.0。但是,當鍵盤在第一次後重新出現時,keyboardSize.height打印出來爲0.0。因此,當出現鍵盤時,我始終無法移動堆疊視圖。偶爾,代碼會在第一次嘗試後再次運行,但不會超過一次,並且行爲不一致。

當我只是打印出keyboardSize,我第一次得到(0.0, 736.0, 414.0, 226.0)。第一次後,keyboardSize打印出來是(0.0, 736.0, 414.0, 0.0),所以只有高度變得不正確。

我怎樣才能始終如一地獲得鍵盤的高度?爲什麼會發生這個問題?

override func viewDidLoad() { 
     NotificationCenter.default.addObserver(self, selector: #selector(ViewController.keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil) 
     NotificationCenter.default.addObserver(self, selector: #selector(ViewController.keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil) 
} 

@objc func keyboardWillShow(notification: NSNotification) { 
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue{ 
     print(keyboardSize.height) 
     ... 
    } 
} 

@objc func keyboardWillHide(notification: NSNotification) { 
     if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue{ ... } 
} 
+0

能否請你描述一下「的時候,第一時間之後再次出現鍵盤」的意思? –

+0

@TungFam是的。當我在搜索欄中輸入內容時,會出現鍵盤。當我完成鍵入並按搜索時,鍵盤消失。當我在搜索欄中重新編輯文本時,鍵盤將再次出現,這就是我的意思是「當鍵盤在第一次後重新出現時」。 –

+0

找到了這個解決方案嗎?我認爲這是iOS 11測試版的問題。因爲我面對同樣的事情,當我在iOS 10上測試它時,它並沒有發生。 – TawaNicolas

回答

0

如果你是顯示鍵盤上方的堆棧視圖中使用輸入配件視圖,你必須配件以真當鍵盤出現firt時間,然後它會給你原來的高度,但比canBecomeFirstResponder當您關閉鍵盤accessoryview使用的tgen incase首先轉到鍵盤關閉通知,再轉到鍵盤打開通知功能。所以你也會在關閉時獲得鍵盤打開的高度。在兩個函數中使用斷點來確認它並通過使用一些檢查變量來解決您的問題。注意******必須閱讀有關輸入附件視圖的最佳方式,才能在聊天應用程序中添加上方鍵盤的視圖。

1

使用此;

UIKeyboardFrameEndUserInfoKey

目標C;

CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size; 
0

使用此代碼

CGSize keyboardSize = 
    [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;