我的应用程序中有一个if语句,用于检测键盘出现时是否向上移动视图。我有一个3.5 / 4,4.7和5.5英寸屏幕。
适用于3.5 / 4和5.5英寸屏幕的屏幕效果很好,但出于某种原因,4.7英寸屏幕的屏幕无法正常工作。
这是我的代码:
if keyboardActive == false && height == 667 && self.entryView.center.y == 333.5 {
如果我删除了self.entryView.center.y == 333.5
,那么它就可以了,这就是问题所在。我已经尝试过多达334次,然后减少到333次,但这并没有帮助。
有谁知道为什么中心y值不是333.5?
答案 0 :(得分:1)
比较浮点数是有问题的。例如:( How should I do floating point comparison?)。
根据文字移动屏幕也存在问题。更好的方法是在视图本地坐标中获取键盘的框架并相应地调整视图大小。请注意,如果使用约束,则必须调整约束而不是视图的框架。
这是我为此目的写的一个方便的功能:
private func extractKeyboardInfo(userInfo: NSDictionary) -> (keyboardFrame: CGRect, duration: NSTimeInterval, viewAnimationOptions: UIViewAnimationOptions) {
let globalKeyboardFrame = (userInfo[UIKeyboardFrameEndUserInfoKey] as NSValue).CGRectValue()
let localKeyboardFrame = self.view.convertRect(globalKeyboardFrame, fromView: nil)
let curve = UInt((userInfo[UIKeyboardAnimationCurveUserInfoKey] as NSNumber).unsignedIntValue << 16)
let viewAnimationOptions = UIViewAnimationOptions.fromRaw(curve)!
let duration = (userInfo[UIKeyboardAnimationDurationUserInfoKey] as NSNumber).doubleValue as NSTimeInterval
return (localKeyboardFrame, duration, viewAnimationOptions)
}