UIViewController
에 UITableView
및 UISegmentedControl
이 있고 그 안에 세그먼트가 4 개 있습니다. 사용자가 다른 세그먼트를 두 드릴 때마다 테이블보기에 표시된 셀 유형이 변경되어야합니다. 이렇게하려면 다음 코드가 있습니다.iOS 7.1에서 UITableView가 제대로 다시로드되지 않습니다.
- (IBAction)segmentedControlChanged:(UISegmentedControl *)sender {
[self.tableView reloadData];
}
일반적으로 세 번째 세그먼트는 테이블 뷰에 가장 많은 셀을 채 웁니다. 따라서 세 번째 세그먼트에서 테이블의 맨 아래로 스크롤 한 다음 다른 세그먼트로 전환하면 테이블보기에서 해당 셀을 다시로드하고 동일한 스크롤 위치에 머물러있게됩니다. 그러나 헤더보기는 테이블보기가 맨 위로 스크롤되어 화면 아래쪽에 배치 된 것처럼 보입니다. 그런 다음 다시 스크롤을 시작하면 테이블이 아래쪽으로 스크롤되고 셀이 나타나는 것처럼 정상적으로 돌아갑니다.
나는 지금까지이 문제를 해결하기 위해 노력 해왔다. 지금까지 본 모든 게시물은 모두 똑같은 제안을했다. 그들은 애니메이션이 메인 스레드가 아닌 다른 스레드에서 처리된다면 이러한 유형의 문제는 피할 수 없다고 말했다. 그래서 코드를 아래와 같이 수정했습니다 :
- (IBAction)segmentedControlChanged:(UISegmentedControl *)sender {
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
});
}
과 : 그들이 일
- (IBAction)segmentedControlChanged:(UISegmentedControl *)sender {
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
[self.tableView reloadData];
}];
}
둘의를. 또한 테이블 뷰를 다시로드 할 때 프로그래밍 방식으로 테이블 뷰를 스크롤 해 보았습니다.
누구에게 이런 일이 발생할 수있는 다른 아이디어가 있습니까? 이 문제는 iOS 7.1에서만 발생합니다.
reloadRowsAtIndexPaths : withRowAnimation :? 전체 테이블 대신 하나의 셀만 다시로드 해 보았습니다. –