2014-09-11 1 views
4

내 애플은 UITableViewCell 하위 클래스와, 셀의 contentView의 폭을 수정과 같이 할 layoutSubviews을 구현layoutSubviews 8 GM

- (void)layoutSubviews { 
    [super layoutSubviews]; 
    // position subviews... 
    CGRect frame = [[self contentView] frame]; 
    frame.size.width -= 20; 
    [[self contentView] setFrame:frame]; 
} 

아이폰 OS 8 시뮬레이터와 엑스 코드 (6)이 코드를 실행 GM 씨앗 이 무한 루프을 트리거합니다. 그러나 iOS 8 GM 시드를 실행하는 실제 iPhone 또는 iPad에서 실행되는 경우 이전 버전의 iOS와 마찬가지로 루프되지 않습니다.

필자는 처음에는 차이점이 컴파일러 최적화라고 생각했지만 시뮬레이터는 디버그 구성과 릴리스 구성 모두에서 반복됩니다.

질문

  • 왜 아이폰 OS 8 GM과 시뮬레이터의 차이점은 무엇입니까?
  • 중요한 버그 수정 사항입니까? 나는 장치에 그것을 재현 할 수없는 경우에도 잠재적으로 심각한 교수형 버그를 전시 애플 리케이션을 공개하는 것을 매우 꺼리고 있습니다.
  • iOS 7 및 6에서 회귀하지 않고 루핑을 제거하기 위해 리팩터링하는 가장 좋은 방법은 무엇입니까?
+0

이 코드는 화면 상에 어떤 현상이 발생하여 모든보기가 하위보기를 다시 레이아웃하게되는 경우를 상상해보십시오. 콘텐츠보기는 폭이 제로가 될 수 있으므로 쉽게 볼 수 있습니다. 이것이 시뮬레이터에서 일어나는 일이라고 말하는 것은 아니지만 가능한 버그를 해결하는 것과 관련하여 좋은 태도를 가지고 있다면이 문제를 해결할 수있을 것입니다. GM 씨드를 아직 다운로드하지 않은 상태에서 코드를 테스트하여 문제가 쉽게 재현되는지 확인한 다음 셀 중 하나를 선택하여 재귀 적으로 백 트레이스를 게시하는 것이 좋습니다. 첫 번째) 메소드 호출. –

답변

4

이전 iOS 8 베타 중 하나에서 이런 일이 일어났습니다. 장치 및 시뮬레이터에서 모두 발생했습니다. 일부 디버깅 후 나는 UITableViewCell이 아마도 iOS8에서 내부적으로 autolayout을 사용한다는 것을 알게되었습니다. 또한 contentView.frame에 대한 변경 사항은 layoutSubviews (이는 무한 루프의 원인 일 수 있음)을 트리거했습니다.

임시 해결책으로 셀의 contentView에 하위보기를 추가하고 그 대신 frame을 수정했습니다. 그런 다음이 뷰를 contentView (모든 사용자 정의 셀 요소의 수퍼 뷰)을 사용하는 것처럼 사용했습니다.

+0

이 작업을 수행하는 방법에 대해 좀 더 자세히 설명해 주시겠습니까? 나는 똑같은 문제를 겪고있다. detailView가 가로 모드에서 올바른 너비로 조정되었는지 확인하려고합니다. 감사! – Ra1nWarden

+0

정확한 문제가 무엇인지 잘 모르겠습니다. 코드에서 아이디어를 보여주는 요령을 만들었습니다 : https://gist.github.com/mciuba/5b9bb9842eb141bea01e. 도움이되지 않으면 새로운 질문을하고 자세한 내용을 입력하십시오. –

+0

당신은 최고입니다, 이것은 문자 그대로 날 걸릴 것입니다. 수동으로 셀 높이를 계산하고 layoutSubviews에서 contentView 프레임을 변경했습니다. nib 파일에서 자동 레이아웃을 해제하면 문제가 해결되었습니다. – aryaxt