UIStoryboard있는 UITableView 함께 설치되어있는보기 컨트롤러가 있습니다. UITableView는 네면에서 컨트롤러의 SafeArea로 제한됩니다.viewDidLayoutSubviews 빈 메서드에 대한 무한 루프에 붙어
이 질문은 이전에 묻는 것처럼 보일 수 있지만 질문을 발견 할 때마다 루프가 발생하는 viewDidLayoutSubviews에서 변경 사항이 발생하기 때문입니다. blank viewDidLayoutSubviews 및 기본 UITableViewCells (nib 없음) 구현이 있습니다. 그러나 iOS 11, Xcode 9.2에서는 tableview를 flicking하면 무한 루프에서 viewDidLayoutSubviews가 호출됩니다. 나는 이런 일이 어떻게 내 인생을 알아낼 수 없습니다
- (void)viewDidLayoutSubviews {
NSLog(@"viewDidLayoutSubviews");
[super viewDidLayoutSubviews];
}
: 이것은 내 구현입니다.
편집 : 컨트롤러에는 NavigationController가 있으며 iAdSuite 예제의 BannerViewController에 포함 된 UISplitViewController의 마스터 컨트롤러입니다.
편집 : 시뮬레이터의 모든 기기에서 iOS 11 (최대 11.2)에서 발생합니다. iOS 10.3을 사용하지 마십시오. viewDidLayoutSubviews
은 iOS 10.3에서도 호출되지 않습니다. UISplitViewController/BannerViewController 대신 UIViewController/TableView와 함께 Nav Controller를 사용하면 동일한 결과를 얻습니다. 그래서이 문제는 iOS 11에서 일어난 일이 아닌 것 같습니다.
편집 : 그래서 이것은 이상합니다 - 네비게이션 컨트롤러에 큰 제목이 선택되었을 때만 발생하는 것처럼 보입니다!
편집 :이 문제는 쉽게 재현 할 수 있습니다. Apple의 iAd Suite 샘플 코드를 다운로드하고 SplitNavigationController 프로젝트를 사용했습니다. 스토리 보드를 업데이트하여 안전 영역 레이아웃 가이드를 사용하는 것을 포함하여 iOS 11 용 프로젝트를 업데이트했습니다. MasterViewController를 UITableViewController에서 UITableView로 UIViewController로 변경했습니다. UIViewController는 스토리 보드의 안전 영역 레이아웃 가이드로 제한되었습니다. MasterTextController에 largeTitleDisplayMode와 largeTitleDisplayMode를 추가했습니다. viewDidLayoutSubviews 메서드에 NSLog 문을 추가하여이 동작을 쉽게 관찰 할 수 있습니다. 저는 이것이 iOS 11의 진짜 문제라고 생각합니다. 그리고 나는 그것의 바닥에 도달하려고 노력할 것이고, 다른 누군가가 어떤 생각이나 제안을 제공 할 수 있다면 감사 할 것입니다.
편집 : 매트는이 문제를 재현하고 다음 링크에서 찾을 수하는 GitHub의 프로젝트에 게시 할 수 있었다 (감사 매트!) : 당신이 버그를 발견 한 것처럼 InfiniteLayoutSubviewsBug
"어떻게 멈추게 할까?"한 가지 간단한 생각 : 그렇게하지 마십시오. 또한 지구상에서 "하위 클래스가 아닌 뷰 컨트롤러가 있습니다"는 의미는 무엇입니까? – matt
여기에 무한 루프가 무엇을 의미하는지 자세히 설명해 주시겠습니까? 앱이이 메소드를 실행하는 것을 정지합니까? –
github에 예제를 게시 할 수 있습니까? 귀하의 설명에 따라 재현 할 수 없습니다. 그것은 아마도 불법적 인 일을하고있는 것처럼 보입니다. 불법적 인 부모보기 컨트롤러 배치 등이있는 것 같습니다. 나는 "viewDidLayoutSubviews"를 호출하기 위해 "tableview를 가볍게 치기"를 기대하지 않을 것이다. – matt