2014-10-19 28 views
-2

我的應用程序中有一條if語句,用於檢測鍵盤出現時是否移動視圖。我有一個單獨的3.5/4,4.7和5.5英寸的屏幕。4.7英寸視圖的中心不是333.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?

+1

是什麼'self.entryView.center.y'實際回報? – Popeye 2014-10-19 20:30:12

+0

啊,明顯的錯誤。它正在返回368,因爲我把6和6 Plus的故事板混在一起。 – user3746428 2014-10-19 20:36:29

回答

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) 
} 
相關問題