Dalam tampilan tabel saya, saya harus gulir ke atas. Tapi saya tidak bisa menjamin bahwa objek pertama akan menjadi bagian 0, baris 0. Mungkin tampilan tabel saya akan mulai dari bagian nomor 5.
Jadi saya mendapat pengecualian, ketika saya menelepon:
[mainTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];
Apakah ada cara lain untuk menggulir ke bagian atas tampilan tabel?
ios
uitableview
Ilya Suzdalnitski
sumber
sumber
self.tableView.scrollToRow(at: IndexPath(row: 0, section: 0), at: UITableViewScrollPosition.top, animated: true)
tampaknya berfungsi di iOS 11Catatan : Jawaban ini tidak valid untuk iOS 11 dan yang lebih baru.
saya lebih memilih
Jika Anda memiliki inset teratas pada tampilan tabel Anda, Anda harus mengurangi itu:
sumber
tableView
memiliki nolcontentInset
dari atas. Sebagai contoh:tableView.contentInset = UIEdgeInsetsMake(5.0f, 0.0f, 250.0f, 0.0f);
. Jika demikian, dalam kode AndatableView
gulir ke(0.0f, 5.0f)
.[tableView setContentOffset:CGPointMake(0.0f, -tableView.contentInset.top) animated:YES];
-scrollView.adjustedContentInset.top
.Kemungkinan Tindakan:
1
2
3
4
5
Nonaktifkan Gulir ke Atas:
Ubah dan gunakan sesuai kebutuhan.
Cepat 4
sumber
Lebih baik tidak menggunakan NSIndexPath (tabel kosong), atau menganggap bahwa titik teratas adalah CGPointZero (insets konten), itulah yang saya gunakan -
Semoga ini membantu.
sumber
Swift 4 :
Ini bekerja dengan sangat baik:
sumber
UITableViewStyleGrouped
(header bergulir dengan konten) dan kode ini berfungsi. Pastikan Anda berada di utas utama dan Anda meluncurkan kode ini setelah tampilan muncul (viewDidAppear
). Jika Anda masih memiliki masalah, coba masukkan kodenya ke dalam ini:DispatchQueue.main.asyncAfter(deadline: .now()+0.1, execute: { // the code }
Saya mengalami masalah dengan panggilan yang mencoba beberapa metode kosong
tableView
. Berikut opsi lain untuk Swift 4 yang menangani tampilan tabel kosong.Pemakaian:
sumber
JANGAN GUNAKAN
Kadang-kadang dapat mengatur offset dengan tidak benar. Misalnya, dalam kasus saya, sel sebenarnya sedikit di atas tampilan dengan insets area aman. Tidak baik.
PENGGUNAAN BUKAN
sumber
Di iOS 11, gunakan
adjustedContentInset
untuk menggulir ke atas untuk kedua kasus dengan benar ketika bilah status panggilan masuk terlihat atau tidak.Cepat:
sumber
Untuk tabel yang memiliki
contentInset
, mengatur offset konten keCGPointZero
tidak akan berfungsi. Ini akan gulir ke bagian atas konten vs ke bagian atas tabel.Sebagai gantinya, memasukkan inset konten menghasilkan ini:
sumber
Kode ini memungkinkan Anda menggulir bagian tertentu ke atas
sumber
Cepat:
sumber
Cepat 3
jika
tableView.setContentOffset
tidak bekerjaMenggunakan:
sumber
Karena saya
tableView
penuh dengan semua jenis insets, ini adalah satu-satunya hal yang bekerja dengan baik:Cepat 3
Cepat 2
sumber
Menambahkan ke apa yang sudah dikatakan, Anda dapat membuat ekstensi (Swift) atau kategori (Tujuan C) untuk membuat ini lebih mudah di masa depan:
Cepat:
Setiap kali Anda ingin menggulir tableView apa pun yang diberikan ke atas, Anda dapat memanggil kode berikut:
sumber
Saya lebih suka yang berikut ini, karena memperhitungkan inset. Jika tidak ada inset, ia akan tetap menggulir ke atas karena inset akan 0.
sumber
Cepat:
jika Anda tidak memiliki header tableView:
jika begitu :
sumber
Swift 5, iOS 13
Saya tahu pertanyaan ini sudah memiliki banyak jawaban tetapi dari pengalaman saya, hanya ada satu metode yang selalu berhasil:
tableView.scrollToRow(at: IndexPath(row: someArray.count - 1, section: 0), at: .bottom, animated: true)
Jika Anda bekerja di async, tabel yang bernyawa dengan keyboard, dll, jawaban yang lain akan sering scroll ke hampir bawah, bukan bagian bawah mutlak. Metode ini akan membawa Anda ke akhir tabel setiap waktu.
sumber
Inilah yang saya gunakan untuk bekerja dengan benar di iOS 11:
sumber
Di Swift 5, Terima kasih @ Adrian menjawab banyak
Pemakaian:
sumber
menggunakan contentOffset bukanlah cara yang benar. ini akan lebih baik karena cara alami tampilan tabel
sumber
Ini adalah satu-satunya cuplikan kode yang berfungsi untuk saya
Swift 4:
PS 70 adalah ketinggian sel tampilan tajuk dan tabel saya
sumber
panggil fungsi ini di mana pun Anda ingin UITableView gulir ke atas
sumber
Swift 4 melalui ekstensi, menangani tampilan tabel kosong:
sumber
Saya menggunakan tabBarController dan saya memiliki beberapa bagian di tableview saya di setiap tab, jadi ini adalah solusi terbaik untuk saya.
sumber
Saya harus menambahkan kalikan dengan
-1 *
jumlah bilah status dan bilah navigasi, karena itu akan setinggi itu dari layar,sumber
dengan cepat
baris Anda = selectioncellRowNumber bagian Anda jika Anda memiliki = selectionNumber jika Anda tidak menetapkan adalah nol
//UITableViewScrollPosition.Middle atau Bawah atau Atas
sumber
Inilah Kode Untuk ScrollTableLihat Ke Atas Secara Programatis
Cepat:
sumber
Dalam Swift-3:
sumber
Jika Anda ingin memindahkan animasi gulir di tabel, gunakan kode ini. Gulir bergerak ke atas dengan animasi dalam 0,5 detik.
sumber
Dengan Swift:
sumber