iOS 8 UITableView 회전 버그

daniel.gindi

그래서 XCode 6에서 앱을 컴파일 한 후 iOS 8에서 실행할 때만 발생하는 이상한 버그를 발견했습니다 . 프레임을 업데이트 한 후 UITableView잘못된 내부 치수를 사용합니다.

이제 정확한 상황을 설명하려고합니다. UITableView측면 회전되어 기본적으로 수평 UITableView. 을 통해 발생합니다 tableView.transform = CGAffineTransformMakeRotation(-M_PI / 2);. 이제 변환을 설정하고 프레임을 설정 한 후 모든 것이 정상입니다. 그러나 물론 대부분의 경우 시스템은 부모를 XIB 크기 나 초기화 크기가 아닌 실제 크기로 설정해야하기 때문에 다른 프레임 변경을 부모에게 보냅니다. 그 순간-테이블 뷰를 포함하여 하위 뷰를 릴레이하면 모든 것이 잘못됩니다. 실제로 테이블 뷰의 프레임이 단순히 설정되어 bounds그 내측있는 ScrollView (8에서는 아이폰 OS를 포함하는 뷰하지만이 UITableView다른있다 UIScrollView라는 그 안에 UITableViewWrapperView. 바와 같이 UITableViewUIScrollView그 자체로는 그들이 왜 다른 것이 필요한지 알 수 없습니다 ...) 부모 너비와 같은 "높이"를 사용합니다. 그리고 "높이"는 실제로 width속성이며 회전 만 가능합니다.

이제 우리는 쉽게 내부의 폭과 관련하여 그들이 버그를 추정 할 수 UIScrollView부모의 실제 폭 UITableView아마도 읽기가 될 수있다, .frame.size.width대신의 .bounds.size.width. 그러나 이상한 점은의 하위 뷰의 프레임을 조사 할 때 UITableView모두 좋은 것 같습니다! 그래서 어딘가에 렌더링 문제 일 것입니다.

따라서 셀의 "높이"는 568 대신 320이고 셀의 "너비"는 320으로 설정되어 있기 때문에 상단에 빈 간격이있는 가로 테이블이 남습니다.

이 문제를 겪고있는 다른 사람들 (또는 Apple로부터)의 소식을 듣게되어 매우 기쁩니다.하지만 마침내 해결책을 찾아서 여기에 질문과 함께 게시하여 저와 다른 사람들을 위해 나중에 참조 할 수 있습니다.

daniel.gindi

따라서 작동하게 한 변경은 다음을 수행하는 대신입니다.

- (void)layoutSubviews
{
    tableView.frame = self.bounds;
}

변환을 재설정하고 UITableView가 변환 후 로컬에서 예상 할 경계로 프레임을 설정 한 다음 변환을 설정하고 올바른 프레임을 설정했습니다. 이것은 약간 혼란 스럽지만 여기에 있습니다.

- (void)layoutSubviews
{
    if (UIDevice.currentDevice.systemVersion.floatValue >= 8.f)
    {
        // iOS 8 layout bug! Table's "height" taken from "width" after changing frame. But then if we cancel transform, set width/height to the final width/height, and rotate it and set to the virtual width/height - it works!

        CGRect rotatedFrame = self.bounds,
        unrotatedFrame = rotatedFrame;
        unrotatedFrame.size.width = rotatedFrame.size.height;
        unrotatedFrame.size.height = rotatedFrame.size.width;

        tableView.transform = CGAffineTransformIdentity;
        tableView.frame = unrotatedFrame;
        tableView.transform = CGAffineTransformMakeRotation(-M_PI / 2);
        tableView.frame = rotatedFrame;
    }
    else
    {
        tableView.frame = self.bounds;
    }
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

iOS 8과 이전 버전의 자동 회전의 차이점

분류에서Dev

회전 후 iOS Cocoa UITableView 위치

분류에서Dev

Hiding the rows in uitableview- iOS8

분류에서Dev

iOS 8 UITableView의 이상한 문제

분류에서Dev

iOS 8 - Initially hide a UITableView's headerView from view

분류에서Dev

Cordova 2.9.x iOS 8 userAgent 버그

분류에서Dev

iOS 8의 래칫 모달 버그

분류에서Dev

iPhone 6 / iOS 8에서 UIWebView를 사용한 MPInlineVideoFullscreenViewController 회전

분류에서Dev

iOS 8에서 회전하면 MPMediaPlayer가 작아집니다.

분류에서Dev

iOS8에서 회전시 툴바 크기 조정

분류에서Dev

iOS 8의 중첩 된 UICollectionViews, AutoLayout 및 회전

분류에서Dev

iOS 8에서 회전하면 MPMediaPlayer가 작아집니다.

분류에서Dev

특정 장치에서 원치 않는 iOS 8 앱 회전

분류에서Dev

iOS 8 : 자유형 ViewController에서 UITableview의 높이를 프로그래밍 방식으로 설정하는 방법

분류에서Dev

iOS Swift : UITableView KeyPad 오버레이

분류에서Dev

iOS UITableView : 섹션 지우기 버튼

분류에서Dev

CSS 전환 변환 회전 버그

분류에서Dev

JAVA의 디버그 로그 회전

분류에서Dev

JAVA의 디버그 로그 회전

분류에서Dev

iOS 8의 기기 버전 인 경우 시작 화면 제거

분류에서Dev

Weblogic 서버의 로그 회전 오류

분류에서Dev

UISwitch가 UITableView (iOS 8)에 표시되지 않습니다.

분류에서Dev

UITableView iOS의 sectionForSectionIndexTitle

분류에서Dev

iOS Today Extension UITableView

분류에서Dev

iOS UITableView cellForRowAtIndexPath Not Calling

분류에서Dev

XIB 버그의 UITableView 및 UITableViewCell?

분류에서Dev

버전> 8에서 Keycloak을 원격 디버그하는 방법

분류에서Dev

Jelastic 로그 회전

분류에서Dev

iOS 6 : UIAlertView 회전 문제

Related 관련 기사

뜨겁다태그

보관