2014-10-19 2 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

+0

아, 분명한 실수. 6과 6 개의 스토리 보드가 섞여서 368이 돌아 왔습니다. – user3746428

답변

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) 
}