Saya memiliki UITableView yang menggunakan sel tabel kustom dan setiap sel memiliki UIWebView.
Karena UIWebView membutuhkan waktu lama untuk memuat, saya ingin menghindari memuat ulang di semua biaya. Dalam beberapa situasi, saya telah memuat semua sel, tetapi tingginya kacau. Oleh karena itu, saya perlu "menyampaikan" tabel tanpa memicu fungsi "cellForRow".
- Saya pasti tidak dapat menggunakan reloadData ... karena akan memuat ulang sel lagi.
- Saya mencoba tableView.setNeedDisplay, setNeedsLayout dll, tidak ada yang mampu mengatur ulang sel tabel
- Satu-satunya cara kerjanya, adalah dengan memanggil blok startupdates / endupdates, blok ini mampu menyampaikan tabel saya tanpa mengaktifkan cellForRow! TAPI, saya tidak ingin animasi! Blok ini menghasilkan efek animasi tetapi saya tidak menginginkannya ...
Bagaimana saya bisa mengatasi masalah saya?
objective-c
uitableview
mkto
sumber
sumber
UITableViewRowAnimationNone
, tetapi dengan ini animasi dapat dengan mudah dilewati!Satu cara lagi untuk melakukannya dengan menggunakan balok
Obj-C
[UIView performWithoutAnimation:^{ [self.tableView beginUpdates]; [self.tableView endUpdates]; }];
Cepat
UIView.performWithoutAnimation { tableView.beginUpdates() tableView.endUpdates() }
sumber
mengerjakan proyek saya, tetapi bukan solusi umum.
let loc = tableView.contentOffset UIView.performWithoutAnimation { tableView.reloadData() tableView.layoutIfNeeded() tableView.beginUpdates() tableView.endUpdates() tableView.layer.removeAllAnimations() } tableView.setContentOffset(loc, animated: true)//animation true may perform better
sumber
Swifties saya harus melakukan hal berikut agar ini bekerja:
// Sadly, this is not as simple as calling: // UIView.setAnimationsEnabled(false) // self.tableView.beginUpdates() // self.tableView.endUpdates() // UIView.setAnimationsEnabled(true) // We need to disable the animations. UIView.setAnimationsEnabled(false) CATransaction.begin() // And we also need to set the completion block, CATransaction.setCompletionBlock { () -> Void in // of the animation. UIView.setAnimationsEnabled(true) } // Call the stuff we need to. self.tableView.beginUpdates() self.tableView.endUpdates() // Commit the animation. CATransaction.commit()
sumber
setAnimationsEnabled(true)
dalam blok penyelesaian.Saya lebih suka transisi yang mulus:
CGPoint offset = self.tableView.contentOffset; [UIView transitionWithView:self.tableView duration:0.5 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{ [self.tableView reloadData]; self.tableView.contentOffset = offset; } completion:nil];
Cobalah.
sumber
Saya ingin memperbarui tinggi sel untuk bagian 5 dan kode berikut berfungsi untuk saya:
UiView.setAnimationsEnabled(False) self.productTableView.reloadSections(NSIndexSet(index: SectionType.ProductDescription.hashValue), withRowAnimation: UITableViewRowAnimation.None) self.productTableView.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 5), atScrollPosition: UITableViewScrollPosition.Bottom, animated: false) UIView.setAnimationsEnabled(true)
sumber