Saya menyesuaikan a UITableView
. Saya ingin menyembunyikan garis yang memisahkan pada yang terakhir sel ... bisakah saya melakukan ini?
Saya tahu saya bisa melakukan tableView.separatorStyle = UITableViewCellStyle.None
tetapi itu akan mempengaruhi semua sel dari tableView. Saya ingin itu hanya mempengaruhi sel terakhir saya.
Jawaban:
di
viewDidLoad
, tambahkan baris ini:dan di
cellForRowAtIndexPath
:untuk iOS versi yang lebih rendah
untuk iOS 7 versi atas (termasuk iOS 8)
sumber
[cell.contentView addSubview:line]
sebagai ganti[cell addSubview:line]
cellForRowAtIndexPath
. Ingatlah bahwa sel digunakan kembali. Setiap kali sel ini digunakan kembali, Anda akan menambahkan tampilan garis pemisah lainnya. Pada daftar besar ini dapat mempengaruhi kinerja gulir. Dan itu bukan cara yang tepat untuk melakukannya.Anda dapat menggunakan kode berikut:
Cepat:
atau :
untuk Margin default:
untuk menunjukkan pemisah ujung ke ujung
Tujuan-C:
sumber
UITableView
, sedangkan jawaban yang diterima berlaku.self.tableView.separatorColor = [UIColor clearColor];
perbaiki.cell.separatorInset = UIEdgeInsetsMake(0.f, 0.f, 0.f, cell.bounds.size.width-cell.layoutMargins.left);
Jika saya tidak mengurangi nilai cell.layoutMargins.left, garis pemisah diambil dari perbatasan kiri ke margin kiri (jika Anda punya).textLabel
layar mati.Untuk menindaklanjuti jawaban Hiren .
di ViewDidLoad dan baris berikut:
Atau, jika Anda menggunakan XIB atau Storyboards, ubah " separator " menjadi " none ":
Dan di CellForRowAtIndexPath tambahkan ini:
Berikut adalah contoh hasil di mana saya menampilkan tampilan tabel dengan Sel dinamis (tetapi hanya memiliki satu dengan konten). Hasilnya adalah bahwa hanya satu yang memiliki separator dan tidak semua tampilan tabel yang "dummy" secara otomatis ditambahkan untuk mengisi layar.
Semoga ini membantu.
EDIT: Bagi mereka yang tidak selalu membaca komentar, sebenarnya ada cara yang lebih baik untuk melakukannya dengan beberapa baris kode:
sumber
Jika Anda tidak ingin menggambar pemisah sendiri, gunakan ini:
API ini hanya tersedia mulai dari iOS 7 sekalipun.
sumber
separatorInset
tampaknya memasukkan isi sel serta pemisah, membutuhkan hack lain untuk mengimbangi:cell.IndentationWidth = -10000;
separatorInset
ke 0 untuk atas, kiri dan bawah dan lebar sel untuk kanan:cell.separatorInset = UIEdgeInsetsMake(0, 0, 0, cell.bounds.size.width);
Ini menghindari perlu menyesuaikan properti sel lainnya.lingkungan saya berkembang
jawaban di atas tidak sepenuhnya bekerja untuk saya
setelah mencoba, solusi saya yang akhirnya berhasil adalah:
dan efeknya adalah:
sumber
Atur
separatorInset.right = .greatestFiniteMagnitude
di sel Anda.sumber
awakeFromNib
applicationDidBecomeActive
Di Swift 3, Swift 4 dan Swift 5 , Anda dapat menulis ekstensi ke UITableViewCell seperti ini:
Maka Anda dapat menggunakan ini seperti di bawah ini (ketika sel adalah instance sel Anda):
Ini benar-benar lebih baik menetapkan lebar sel tampilan tabel sebagai inset kiri daripada menetapkan beberapa nomor acak. Karena dalam beberapa dimensi layar, mungkin bukan sekarang tetapi di masa depan pemisah Anda masih dapat terlihat karena angka acak itu mungkin tidak cukup. Selain itu, di iPad dalam mode lansekap Anda tidak dapat menjamin bahwa pemisah Anda akan selalu tidak terlihat.
sumber
Solusi yang lebih baik untuk iOS 7 & 8
Jika aplikasi Anda dapat diputar - gunakan 3000.0f untuk konstanta inset kiri atau hitung dengan cepat. Jika Anda mencoba mengatur inset kanan, Anda memiliki bagian pemisah yang terlihat di sisi kiri sel pada iOS 8.
sumber
Di iOS 7, pemisah sel gaya yang dikelompokkan UITableView terlihat sedikit berbeda. Ini terlihat seperti ini:
Saya mencoba jawaban Kemenaran untuk melakukan ini:
Namun sepertinya itu tidak berhasil untuk saya. Saya tidak yakin mengapa. Jadi saya memutuskan untuk menggunakan jawaban Hiren , tetapi menggunakan
UIView
alih-alihUIImageView
, dan menarik garis dalam gaya iOS 7:Jika Anda menggunakan ini, pastikan Anda memasukkan ketinggian tampilan tabel yang benar di pernyataan if kedua. Saya harap ini bermanfaat bagi seseorang.
sumber
Di subkelas UITableViewCell Anda, ganti layoutSubviews dan sembunyikan _UITableViewCellSeparatorViewView. Bekerja di bawah iOS 10.
sumber
Saya tidak percaya pendekatan ini akan bekerja dalam keadaan apa pun dengan sel dinamis ...
Tidak masalah metode tableview mana yang Anda lakukan untuk sel dinamis sel tempat Anda mengubah properti inset akan selalu memiliki properti inset yang ditetapkan sekarang setiap kali dequeued menyebabkan mengamuk dari pemisah garis yang hilang ... Itu sampai Anda ubah sendiri
Sesuatu seperti ini bekerja untuk saya:
Dengan begitu Anda memperbarui status struktur data Anda di setiap beban
sumber
Di Swift menggunakan iOS 8.4 :
Catatan: cuplikan di atas ini akan berfungsi di UITableView menggunakan sel dinamis. Satu-satunya masalah yang dapat Anda temui adalah ketika Anda menggunakan sel statis dengan kategori, tipe pemisah yang berbeda dari tidak ada dan gaya yang dikelompokkan untuk tampilan tabel. Bahkan, dalam kasus khusus ini tidak akan menyembunyikan sel terakhir dari setiap kategori. Untuk mengatasinya, solusi yang saya temukan adalah mengatur pemisah sel (melalui IB) menjadi tidak ada dan kemudian membuat dan menambahkan secara manual (melalui kode) tampilan garis Anda ke setiap sel. Sebagai contoh, silakan periksa cuplikan di bawah ini:
sumber
Gunakan subkelas ini, set
separatorInset
tidak berfungsi untuk iOS 9.2.1, konten akan diperas.https://gist.github.com/liruqi/9a5add4669e8d9cd3ee9
sumber
Yang jauh lebih sederhana dan logis adalah melakukan ini:
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { return [[UIView alloc] initWithFrame:CGRectZero]; }
Dalam kebanyakan kasus, Anda tidak ingin melihat hanya pemisah tableCiewCell terakhir. Dan pendekatan ini hanya menghapus pemisah tableViewCell terakhir, dan Anda tidak perlu memikirkan masalah autolayout (mis. Perangkat yang berputar) atau nilai hardcode untuk mengatur insets pemisah.
sumber
Dalam
willdisplaycell
:sumber
Menggunakan Swift 3 dan mengadopsi metode peretasan tercepat, Anda dapat meningkatkan kode menggunakan ekstensi :
Lalu, saat Anda mengkonfigurasi sel:
sumber
sumber
Cara terbaik untuk mencapai ini adalah mematikan pemisah garis default, subkelas,
UITableViewCell
dan menambahkan pemisah garis khusus sebagai subview daricontentView
- lihat di bawah sel kustom yang digunakan untuk menyajikan objek tipeSNStock
yang memiliki dua sifat string,ticker
danname
:Untuk menonaktifkan penggunaan pemisah garis default
tableView.separatorStyle = UITableViewCellSeparatorStyle.None;
,. Sisi konsumen relatif sederhana, lihat contoh di bawah ini:sumber
Untuk Swift 2:
tambahkan baris berikut ke
viewDidLoad()
:sumber
jika jawaban yang diterima tidak berfungsi, Anda dapat mencoba ini:
Itu bagus ;)
sumber
Coba kode di bawah ini, mungkin dapat membantu Anda menyelesaikan masalah Anda
sumber
sumber
Anda harus mengambil sel khusus dan menambahkan Label dan menetapkan batasan seperti label harus mencakup seluruh area sel. dan tulis baris di bawah ini di konstruktor.
Juga atur margin Layout UITableView sebagai berikut
sumber
Saya tidak bisa menyembunyikan pemisah pada sel tertentu kecuali menggunakan solusi berikut ini
sumber
Untuk iOS7 dan di atasnya, cara yang lebih bersih adalah dengan menggunakan INFINITY alih-alih nilai hardcoded. Anda tidak perlu khawatir memperbarui sel ketika layar berputar.
sumber
Seperti yang ditunjukkan oleh banyak orang, Anda dapat dengan mudah menyembunyikan semua pemisah UITableViewCell hanya dengan mematikannya untuk seluruh UITableView itu sendiri; misalnya di UITableViewController Anda
Sayangnya, ini adalah PITA nyata untuk dilakukan pada per sel , yang sebenarnya Anda tanyakan.
Secara pribadi, saya sudah mencoba banyak permutasi untuk mengubah
cell.separatorInset.left
, sekali lagi, seperti yang (banyak) orang lain sarankan, tetapi masalahnya adalah, mengutip Apple (penekanan ditambahkan):" ... Anda dapat menggunakan properti ini untuk menambahkan ruang antara isi sel saat ini dan tepi kiri dan kanan tabel. Nilai inset positif memindahkan konten sel dan pemisah sel ke dalam dan menjauh dari tepi tabel ... "
Jadi, jika Anda mencoba 'menyembunyikan' pemisah dengan mendorongnya ke luar layar ke kanan, Anda juga dapat membuat indentasi konten sel Anda juga. Seperti yang disarankan oleh crifan, Anda kemudian dapat mencoba untuk mengkompensasi efek samping buruk ini dengan mengatur
cell.indentationWidth
dancell.indentationLevel
tepat memindahkan semuanya kembali, tetapi saya telah menemukan ini juga tidak dapat diandalkan (konten masih mendapatkan indentasi ...).Cara paling andal yang saya temukan adalah melakukan over-ride
layoutSubviews
dalam subclass UITableViewCell sederhana dan mengatur inset kanan sehingga menyentuh inset kiri, membuat pemisah memiliki 0 lebar dan tidak terlihat [ini perlu dilakukan dalam layoutSubviews untuk secara otomatis menangani rotasi]. Saya juga menambahkan metode kenyamanan ke subkelas saya untuk mengaktifkannya.Peringatan: tidak ada cara yang dapat diandalkan untuk mengembalikan inset kanan yang asli , jadi Anda tidak dapat 'membatalkan' pemisah, maka dari itu mengapa saya menggunakan
hideSeparator
metode yang tidak dapat diubah (vs mengekspos separatorIsHidden). Harap perhatikan separatorInset tetap ada di seluruh sel yang digunakan kembali sehingga, karena Anda tidak dapat 'un-hide', Anda perlu menjaga sel-sel separator tersembunyi ini terisolasi di reuseIdentifier mereka sendiri.sumber
Persyaratan saya adalah menyembunyikan pemisah antara sel ke-4 dan ke-5. Saya mencapainya dengan
sumber
Cepat:
Tujuan-C:
sumber
Di dalam kelas sel tampilan tabel. letakkan baris kode ini
sumber
Di iOS9 saya punya masalah bahwa mengubah inset pemisah juga memengaruhi posisi teks- dan detailLabel.
Saya menyelesaikannya dengan ini
sumber