2012-05-08 1 views
3

iPhone 4 및 iOS 5.1과 결합 된 UIScrollView 컨트롤러를 사용할 때 이상한 문제가 있습니다.iOS 5.1에 표시되는 모달보기 컨트롤러 후 UIScrollView가 올바르게 작동하지 않습니다.

콘텐츠 크기가 640x480 (사실상 이중 화면) 인 UIScrollView가 있으며 두 개의 '화면'간에 전환하기 위해 스 와이프 외에도 사용자가 내가 호출 한 항목에 대한 응답으로 화면을 탭하도록 허용합니다. 그것은 단지 중 하나를 완전히 왼쪽으로 휴식을 제공 할 수 있도록 탭은 페이징이 가능하게했다 스크롤 뷰를주의 (표시된 스크롤 뷰의 오른쪽 동안 발생한 경우 같은 ...

[scrollView scrollRectToVisible:(CGRectMake 320,0,320,480) animated:YES]; 

첫 번째 (320)는 0이 될 것이다 또는 완전히 오른쪽).

필자는 때로는 스크롤 뷰가 포함 된이보기 컨트롤러에서 presentModalViewController를 사용하여 추가보기 컨트롤러를 모달 표시하는 경우가 있습니다.

모달보기 컨트롤러가 표시되고 이후에 애니메이션이 YES로 설정된 경우 scrollRectToVisible 메서드가 더 이상 작동하지 않을 때까지 모든 것이 완벽하게 작동합니다 (애니메이션을 아니요로 변경하면 예상대로 작동 함). 참고로, 탭이 여전히 등록되어 있으며 scrollRectToVisible이 호출되고 있습니다. 애니메이션이 YES로 설정된 경우에는 아무 것도 수행하지 않습니다.

키커가 있습니다.이 버그는 iPhone 4를 실행하는 iOS 5.x에서만 발생합니다.
그것은 내에서 완벽하게 (모달 뷰 컨트롤러를 표시 한 후에도) 작동 : 가장 놀라운 4.x의 을 실행 아이폰 3G 실행 4.x의 경우, 아이폰 3GS 실행 3.x를 아이팟 터치 (2 세대) 5.x를 실행하는 시뮬레이터.

이것이 애니메이션 시스템의 버그인지 궁금해 모달 뷰 컨트롤러 프리젠 테이션에서 애니메이션을 사용할 수 없게되어 버렸고 효과가 없었습니다. iOS 5.1이 설치된 iPhone 4에서도 문제가 발생했습니다.

누구나이 문제를 일으킬 수있는 원인과 해결 방법에 대한 아이디어가 있습니까?

답변

0

나는 동일한 문제가있었습니다. modalViewController을 기각 한 후 내 UIScrollerView20px으로 바뀌 었으며, 높이는 상태 표시 줄과 같습니다. 즉, UIViewController이로드되고 UIScrollView이 생성되면 UIScrollView은 실제로 상태 표시 줄이 없다는 것을 의미합니다.
그래서 있는 viewDidLoad에 넣어하려고 :

[[UIApplication sharedApplication] setStatusBarHidden:NO]; 

이제 내 UIScrollView 항상 Y 위치 20 픽셀로, 상태 표시 줄 아래에 유지됩니다. 그것은 절대로 움직이지 않습니다.

0

5.1을 실행하는 iPhone4에서이 작업을 마칠 수있었습니다. 스크롤 뷰의 수평 속성을 확인하는 것은 문제를 해결하도록 설정되어 있습니다.하지만 이것을 선택하지 않으면 처음부터 문제가 발생합니다. 나는 이것이 iOS의 버그라는 것을 확신합니다.

+0

iOS 5.1.1로 업데이트하기 전까지는 작동했지만 이제는이 해결 방법이 더 이상 작동하지 않습니다 ... –

2

마지막으로 추적했습니다. 무슨 돼지 ...

나는 다른보기 컨트롤러보기의 하위보기로보기 컨트롤러에서보기를 포함하고 있습니다. 그래서 내 스크롤보기에는 연결된보기 컨트롤러가있는보기가 포함되어 있습니다.

iOS 5.x 이전에는 viewWillAppear, viewWillDisappear, viewDidAppear 및 viewWillDisappear 메소드가 하위 뷰보기 제어기에서는 호출되지 않고 기본보기 제어기에서만 호출됩니다. 이미 이것을 알고 있다면 이러한 이벤트가 발생할 때 수동으로 하위보기보기 컨트롤러 메서드를 호출하기 위해 주보기 컨트롤러를 설정합니다.

그러나 iOS 5.x에서이 문제는 수동으로 viewWillAppear에 대한 호출을 내 하위보기 컨트롤러에 수동으로 전달했기 때문에 더 이상 필요하지 않게되었습니다. 5.x에서 메소드를 자동으로 가져옵니다. 5.x에서 호출되었습니다. 결과적으로 이제는 5.x에서 두 번 호출되었지만 4.x 또는 이전 장치에서 실행될 때는 한 번만 호출됩니다.

결과적으로 5 세 이하.x 내 NSTimer 내 updateUI 메서드를 호출하는 데 사용되는 두 번 만들지 만 viewDidDisappear 있기 때문에 타이머를 파괴합니다 경우에만 NSTimers 누출 해요 - 4.x 미만이 아닙니다.

여러 NSTimers가 반복적으로 내 updateUI 메소드를 호출하는 결과로 UI의 상수 업데이트로 인해 애니메이션 시스템이 종료되고 실제 장치에서 실행될 때 scrollView의 애니메이션이 실패합니다. 나는 Mac에서 CPU가 추가 작업량을 처리하고 여전히 애니메이션을 올바르게 수행 할 수 있기 때문에 5.x를 실행하는 시뮬레이터에서 계속 작동하는 것으로 추측합니다.

내 viewWillAppear 메서드에서 NSTimer가 아직 만들어지지 않았는지 확인하기위한 간단한 검사로 문제가 해결되어 4.x 및 이전 버전과의 호환성을 유지했습니다.

Apple이 주요 버전으로 iOS를 업데이트 할 때마다 이러한 종류의 문제에 대해 좌절감을 표시합니다 ...이 이야기의 사기는 오랫동안 서있는 수업이 OS의 여러 버전에서 동일한 동작을 계속한다고 가정하지 않습니다. .