2015-06-26 146 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() 
} 

这是用来解决我的问题的代码段。