Có sự cố với một vài lượt xem bảng trong ứng dụng của tôi.Nội dung UITableViewSize
Sự cố xảy ra khi nội dung của bảng thay đổi (và do đó nội dung của chế độ xem bảng trở nên lớn hơn).
Vì một số lý do, contentSize của UITableView vẫn giữ nguyên nghĩa là tôi không thể cuộn để xem nội dung mới.
Điều này xảy ra khi một ô cụ thể lớn hơn (sau khi [tableView reloadData];) hoặc khi tôi thêm ô mới (sử dụng phương thức ủy nhiệm NSFetchedResultsController).
Có điều gì tôi cần làm cho bảngView để điều chỉnh nội dung của nóKích thước không?
Chỉnh sửa để hiển thị mã nhưng đây chỉ là soạn sẵn NSFetchedResultsController đang đại biểu ...
- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller {
// The fetch controller is about to start sending change notifications, so prepare the table view for updates.
[self.tableView beginUpdates];
}
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath {
UITableView *tableView = self.tableView;
switch(type) {
case NSFetchedResultsChangeInsert:
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeDelete:
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeUpdate:
[self configureCell:(OJFPunchListCell*)[tableView cellForRowAtIndexPath:indexPath] atIndexPath:indexPath];
break;
case NSFetchedResultsChangeMove:
[tableView deleteRowsAtIndexPaths:[NSArray
arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
[tableView insertRowsAtIndexPaths:[NSArray
arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
}
}
- (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id)sectionInfo atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type {
switch(type) {
case NSFetchedResultsChangeInsert:
[self.tableView insertSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeDelete:
[self.tableView deleteSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade];
break;
}
}
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
// The fetch controller has sent all current change notifications, so tell the table view to process all updates.
[self.tableView endUpdates];
}
tôi đã thực hiện hình thức này mà trước đây trong iOS5 và chưa bao giờ có một vấn đề với nó. Dường như đây là khả năng thay đổi iOS6?
:: EDIT ::
Điều ngu ngốc về việc này là tôi có một số UITableViewControllers khác trong cùng một ứng dụng và tất cả chúng đều làm việc tốt. Tôi có thể thêm các ô mới, thêm các ô có kích thước động, thay đổi kích thước ô, v.v ... và tất cả các bảng đều cuộn đúng cách lên xuống tất cả nội dung.
Sự cố này hiện đang diễn ra trên một vài lần xem bảng mà tôi đã thêm gần đây.
:: EDIT ::
OK, chỉ cần thực hiện một số gỡ lỗi. Khi tôi lần đầu tiên đi vào Bảng Xem contentSize.height là 594.
Khi tôi sau đó thêm một mục mới và quay trở lại vào tableviewController cùng các contentSize.height là 749.
Tuy nhiên, tôi không thể cuộn để xem ô mới được thêm vào ở cuối bảngView. Nó chỉ sẽ không 'cuộn ở đó. Nó bị trả lại ở chiều cao contentSize cũ.
Nếu bạn cung cấp chiều cao phù hợp với các tế bào trong 'heightForRow: atIndexPath:' nó cần được ok. Bạn đang cập nhật chiều cao khi ô được cho là lớn hơn? –
Tôi không bao giờ cần sửa đổi nội dung khi thêm ô. Bạn sử dụng phương pháp nào? Chèn hàng? Bạn có thể hiển thị một số mã không? –
Vâng, tôi đang đặt chiều cao đúng cách khi ô thực tế lớn hơn. Nhưng đáy của tableview không di chuyển đến nó bằng số tiền mà các tế bào đã lớn hơn. tức là nếu ô lớn hơn 50 điểm thì tôi không thể cuộn để xem 50 điểm dưới cùng của ô. Ngoài ra, bảng mà tôi đang thêm các ô mới, tất cả các ô có cùng kích thước, chỉ có nhiều ô hơn. (giống như mô hình chi tiết chính, chế độ xem bảng chính có nút + để đẩy tới bộ điều khiển để tạo mục mới sau đó được hiển thị trong chính) ô mới ở đó nhưng chế độ xem cuộn bị trả lại nên tôi không thể nhìn thấy. – Fogmeister