有时我在iOS代码世界中感到迷茫。它告诉我它没有打开它应该有一个"!"。当我修复它时,它告诉我它错了并删除"!"。所以我继续循环。我不能为我的生活找出这段代码的错误:
让keyboardSize:CGSize = info.objectForKey(UIKeyboardFrameEndUserInfoKey)?. frame.size
以下是完整代码:
func keyboardWasShown(notification: NSNotification) -> Void {
let info: NSDictionary = notification.userInfo!
let keyboardSize: CGSize = info.objectForKey(UIKeyboardFrameEndUserInfoKey)?.frame.size
let buttonOrigin: CGPoint = self.clearAllButton.frame.origin
let buttonHeight: CGFloat = self.clearAllButton.frame.size.height
let visibleRect: CGRect = self.view.frame
visibleRect.size.height -= CGFloat(keyboardSize.height) as CGFloat
if (!CGRectContainsPoint(visibleRect, buttonOrigin)){
let scrollPoint: CGPoint = CGPointMake(0.0, buttonOrigin.y - visibleRect.size.height + buttonHeight)
self.scrollView.setContentOffset(scrollPoint, animated: true)
}
}
答案 0 :(得分:1)
您的keyboardSize常量具有CGSize类型和您赋予它的值info.objectForKey(UIKeyboardFrameEndUserInfoKey)?.frame.size
可能返回nil,因此您必须将常量类型声明为CGSize可选let keyboardSize: CGSize? = ...
EDITED
由于您使用键盘大小来计算可见的rect,因此完整代码应如下所示
func keyboardWasShown(notification: NSNotification) -> Void {
let info: NSDictionary = notification.userInfo!
if let keyboardSize: CGSize = info.objectForKey(UIKeyboardFrameEndUserInfoKey)?.frame.size {
let buttonOrigin: CGPoint = self.clearAllButton.frame.origin
let buttonHeight: CGFloat = self.clearAllButton.frame.size.height
let visibleRect: CGRect = self.view.frame
visibleRect.size.height -= CGFloat(keyboardSize.height) as CGFloat
if (!CGRectContainsPoint(visibleRect, buttonOrigin)){
let scrollPoint: CGPoint = CGPointMake(0.0, buttonOrigin.y - visibleRect.size.height + buttonHeight)
self.scrollView.setContentOffset(scrollPoint, animated: true)
}
}
}