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
- (void)viewDidLoad {
...
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
...
}
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.
@interface MyTableViewCellSubclass()
@property BOOL separatorIsHidden;
@end
@implementation MyTableViewCellSubclass
- (void)hideSeparator
{
_separatorIsHidden = YES;
}
- (void)layoutSubviews
{
[super layoutSubviews];
if (_separatorIsHidden) {
UIEdgeInsets inset = self.separatorInset;
inset.right = self.bounds.size.width - inset.left;
self.separatorInset = inset;
}
}
@end
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.