2015-06-26 78 views
0

我試圖爲iOS創建一個聊天界面,根據鍵盤的存在展開和縮小。如何根據鍵盤大小正確實現縮小和擴大視圖?

我已經實現了它使用鍵盤的觀察員將顯示並將消失通知及其工作。

func keyboardWillDisappear(notification: NSNotification){ 
    var userInfo:NSDictionary = notification.userInfo! 
    var keyboardSize = userInfo.objectForKey(UIKeyboardFrameEndUserInfoKey)!.CGRectValue().size 
    var oldViewFrame : CGRect = self.view.frame 
    self.view.frame = CGRectMake (0, 0, oldViewFrame.width, oldViewFrame.height + keyboardSize.height) 
} 
func keyboardWillAppear(notification: NSNotification){ 

    var keyboardSize = userInfo.objectForKey(UIKeyboardFrameEndUserInfoKey)!.CGRectValue().size 
    var oldViewFrame : CGRect = self.view.frame 
    self.view.frame = CGRectMake (0, 0, oldViewFrame.width, oldViewFrame.height - keyboardSize.height)  
} 

現在在一定程度上,如果用戶試圖激活或關閉預測鍵入建議的東西炸燬這個作品不過。 keyboardWillAppear被調用,但keyboardWillDisappear不和,因此視圖中再次縮小,再每一次預測都是啓用

必須有在做這個簡單和更安全的方式,如果有其他的事情,我應該注意請告訴我。 感謝

+0

你在用什麼樣的視圖? 'UIScrollView'會自動爲你處理。如果不是這樣,你可能會想在網上找到一個你可以實現的庫來處理它,否則它很麻煩。 – pbush25

+0

我使用單元格作爲收到的消息的表格視圖 – DatForis

回答

1

您還需要觀察

UIKeyboardWillChangeFrameNotification 

和/或

UIKeyboardDidChangeFrameNotification 
+0

噢好吧!感謝您的快速響應。當我回家後我會檢查它,我會回覆你 – DatForis

+0

只有當屏幕上的鍵盤框架被改變時纔會調用該功能。所以我添加了它,並根據舊鍵盤和新鍵盤之間的差異增加了鍵盤的尺寸 – DatForis

0
func keyboardFrameWillChange(notification : NSNotification){ 
    var userInfo:NSDictionary = notification.userInfo! 
    var oldKeyboardHeight : CGSize = userInfo.objectForKey(UIKeyboardFrameBeginUserInfoKey)!.CGRectValue().size 
    var newKeyboardHeight : CGSize = userInfo.objectForKey(UIKeyboardFrameEndUserInfoKey)!.CGRectValue().size 
    var oldViewFrame : CGRect = self.view.frame 
    var difference = newKeyboardHeight.height - oldKeyboardHeight.height 
    self.view.frame = CGRectMake (0, 0, oldViewFrame.width, oldViewFrame.height - difference) 
    scrollToBottom() 
} 

這是用來解決我的問題的代碼段。