Ketika saya mengatur tampilan tabel dengan 4 baris, masih ada garis pemisah tambahan (atau sel kosong tambahan) di bawah baris yang diisi.
Bagaimana saya menghapus sel-sel ini?
Ketika saya mengatur tampilan tabel dengan 4 baris, masih ada garis pemisah tambahan (atau sel kosong tambahan) di bawah baris yang diisi.
Bagaimana saya menghapus sel-sel ini?
Jawaban:
Seret UIView ke meja. Di storyboard, itu akan duduk di bagian atas di bawah sel khusus Anda. Anda mungkin lebih suka menyebutnya "footer".
Ini ditunjukkan dengan warna hijau untuk kejelasan, Anda mungkin ingin warna yang jelas.
Perhatikan bahwa dengan menyesuaikan ketinggian, Anda dapat memengaruhi cara "bouncing bawah" tabel ditangani, seperti yang Anda inginkan. (Tinggi nol biasanya baik-baik saja).
Untuk melakukannya secara terprogram:
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.tableFooterView = UIView()
}
- (void)viewDidLoad
{
[super viewDidLoad];
// This will remove extra separators from tableview
self.tableView.tableFooterView = [UIView new];
}
atau jika Anda lebih suka,
self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
Tambahkan ke pengontrol tampilan tabel ...
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
// This will create a "invisible" footer
return CGFLOAT_MIN;
}
dan jika perlu ...
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
return [UIView new];
// If you are not using ARC:
// return [[UIView new] autorelease];
}
tableFooterView
daun pemisah pada sel terakhir di baris, karena tabel masih mengantisipasi konten di bawah sel itu. Menggunakan cara historis akan menghilangkan pemisah terakhir dan terlihat lebih baik secara keseluruhan.
Berikut cara lain untuk melakukannya tanpa menggunakan gaya tabel yang dikelompokkan, dan yang mungkin tidak Anda duga. Menambahkan header dan footer ke tabel (mungkin satu atau yang lain sudah cukup, belum diperiksa) menyebabkan pemisah menghilang dari baris pengisi / kosong.
Saya menemukan ini karena saya ingin sedikit ruang di bagian atas dan bawah meja untuk mengurangi risiko menekan tombol daripada sel meja dengan jari gemuk. Berikut adalah metode untuk menempel tampilan kosong sebagai header dan footer. Gunakan ketinggian apa pun yang Anda suka, Anda masih menghilangkan garis pemisah ekstra.
- (void) addHeaderAndFooter
{
UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 10)];
v.backgroundColor = [UIColor clearColor];
[self.myTableView setTableHeaderView:v];
[self.myTableView setTableFooterView:v];
[v release];
}
Menanggapi @Casebash, saya kembali ke kode di aplikasi saya ("AcmeLists" List Manager di iTunes store ...) dan memotong pendek metode addHeaderAndFooter untuk memverifikasi. Tanpa itu , saya memiliki pemisah baris tambahan; dengan kode, saya memiliki apa yang Anda lihat di jepretan jendela ini: tidak ada gambar pemisah baris tabel . Jadi saya tidak yakin mengapa itu tidak berhasil untuk Anda. Selain itu, masuk akal bagi saya bahwa memiliki footer kustom pada tampilan tabel tentu harus berhenti menggambar pemisah baris untuk baris kosong di bawahnya. Itu akan mengerikan. Sebagai referensi, saya melihat tabel di mana ada lebih banyak baris daripada yang bisa dilihat di layar, dan kemudian untuk tabel dengan dua baris. Dalam kedua kasus, tidak ada pemisah asing.
Mungkin tampilan khusus Anda sebenarnya tidak ditambahkan. Untuk memeriksa itu, atur warna latar belakang ke sesuatu selain clearColor
, misalnya [UIColor redColor]
,. Jika Anda tidak melihat beberapa bilah merah di bagian bawah tabel, footer Anda tidak disetel.
Menghapus garis pemisah tambahan untuk baris kosong di UITableView di Swift
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.yourTableview.tableFooterView = UIView()
}
Saya ingin menyampaikan jawaban wkw :
Cukup menambahkan hanya footer dengan tinggi 0 akan melakukan trik. (diuji pada SDK 4.2, 4.4.1)
- (void) addFooter
{
UIView *v = [[UIView alloc] initWithFrame:CGRectZero];
[self.myTableView setTableFooterView:v];
}
atau bahkan lebih sederhana - tempat Anda mengatur tampilan tabel, tambahkan baris ini:
//change height value if extra space is needed at the bottom.
[_tableView setTableFooterView:[[UIView alloc] initWithFrame:CGRectMake(0,0,0,0)]];
atau bahkan lebih sederhana - untuk menghapus pemisah apa pun:
[_tableView setTableFooterView:[UIView new]];
Terima kasih untuk wkw lagi :)
Cukup seret UIView
ke dalam Anda UITableView
sebagai footer. Atur tinggi tampilan footer ke 0.
Coba ini. Ini bekerja untuk saya:
- (void) viewDidLoad
{
[super viewDidLoad];
// Without ARC
//self.tableView.tableFooterView = [[[UIView alloc] init] autorelease];
// With ARC, tried on Xcode 5
self.tableView.tableFooterView = [UIView new];
}
Jika Anda menggunakan Swift, tambahkan kode berikut untuk viewDidLoad dari pengontrol yang mengelola tampilan tabel:
override func viewDidLoad() {
super.viewDidLoad()
//...
// Remove extra separators
tableView.tableFooterView = UIView()
}
Anda bisa menambahkan footer kosong di bagian akhir kemudian akan menyembunyikan sel-sel yang kosong tetapi juga akan terlihat sangat jelek:
tableView.tableFooterView = UIView()
Ada pendekatan yang lebih baik: tambahkan garis 1 titik di akhir tampilan tabel karena footer dan sel-sel kosong juga tidak akan ditampilkan lagi.
let footerView = UIView()
footerView.frame = CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 1)
footerView.backgroundColor = tableView.separatorColor
tableView.tableFooterView = footerView
cukup tambahkan kode ini ( Swift ). .
tableView.tableFooterView = UIView()
Memajukan solusi J. Costa: Anda dapat membuat perubahan global ke tabel dengan meletakkan baris kode ini:
[[UITableView appearance] setTableFooterView:[[UIView alloc] initWithFrame:CGRectZero]];
di dalam metode pertama yang mungkin (biasanya di AppDelegate
, dalam: application:didFinishLaunchingWithOptions:
metode).
Saya tahu pertanyaan ini telah diterima tetapi saya menempatkan di sini cara yang berbeda untuk menyembunyikan garis pemisah ekstra UITableView
.
Anda dapat menyembunyikan tableView
garis pemisah standar, dan menambahkan garis kustom di bagian atas setiap sel.
Memperbarui:
Cara termudah untuk menambahkan pemisah khusus adalah dengan menambahkan sederhana dengan UIView
tinggi 1px:
UIView* separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 1)];
separatorLineView.backgroundColor = [UIColor grayColor]; /// may be here is clearColor;
[cell.contentView addSubview:separatorLineView];
ATAU
self.tblView=[[UITableView alloc] initWithFrame:CGRectMake(0,0,320,370) style:UITableViewStylePlain];
self.tblView.delegate=self;
self.tblView.dataSource=self;
[self.view addSubview:self.tblView];
UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 10)];
v.backgroundColor = [UIColor clearColor];
[self.tblView setTableHeaderView:v];
[self.tblView setTableFooterView:v];
[v release];
ATAU
- (float)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
// This will create a "invisible" footer
return 0.01f;
}
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
// To "clear" the footer view
return [[UIView new] autorelease];
}
ATAU Cara terbaik dan sederhana yang saya suka adalah
self.tableView.tableFooterView = [[UIView alloc] init];
Coba yang mana saja;
Anda mungkin menemukan banyak jawaban untuk pertanyaan ini. Sebagian besar dari mereka di sekitar manipulasi dengan UITableView
's tableFooterView
atribut dan ini adalah cara yang tepat untuk menyembunyikan baris kosong. Untuk penyelenggaraan, saya telah membuat ekstensi sederhana yang memungkinkan untuk menghidupkan / mematikan baris kosong dari Interface Builder. Anda dapat memeriksanya dari file inti ini . Saya harap ini bisa menghemat sedikit waktu Anda.
extension UITableView {
@IBInspectable
var isEmptyRowsHidden: Bool {
get {
return tableFooterView != nil
}
set {
if newValue {
tableFooterView = UIView(frame: .zero)
} else {
tableFooterView = nil
}
}
}
}
Pemakaian:
tableView.isEmptyRowsHidden = true
uitableview sembunyikan garis pemisah ekstra sembunyikan garis pemisah tambahan di swift 3.0
self.tbltableView.tableFooterView = UIView(frame: .zero)
Jika Anda tidak ingin pemisah setelah sel terakhir, maka Anda membutuhkan tinggi mendekati nol tetapi tidak nol untuk footer Anda.
Di Anda UITableViewDelegate
:
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return .leastNormalMagnitude
}
Swift bekerja sangat baik dengan:
tableView.tableFooterView = UIView()
Tambahkan saja tampilan dengan warna pemisah yang diinginkan sebagai warna latar, lebar 100%, tinggi 1px pada posisi x0 y-1 ke tableViewCell Anda. Pastikan tableViewCell tidak memotong subview, sebaliknya tableView seharusnya.
Jadi, Anda mendapatkan pemisah absolut yang sederhana dan berfungsi hanya antara sel yang ada tanpa per kode atau IB.
Catatan: Pada pantulan vertikal, separator pertama muncul, tetapi itu seharusnya tidak menjadi masalah karena itu adalah perilaku iOS default.
Untuk menghilangkan garis pemisah tambahan dari bagian bawah UItableview secara terprogram, cukup tulis dua baris kode berikut dan itu akan menghapus pemisah tambahan dari itu.
tableView.sectionFooterHeight = 0.f;
tableView.sectionHeaderHeight = 0.f;
Trik ini bekerja untuk saya sepanjang waktu, coba sendiri.
Saya beruntung menerapkan sepotong jawaban yang diterima (iOS 9+, Swift 2.2). Saya telah mencoba menerapkan:
self.tableView.tableFooterView = UIView(frame: .zero)
Namun, tidak ada efek pada saya tableView
- saya percaya itu mungkin ada hubungannya dengan fakta yang saya gunakan UITableViewController
.
Sebaliknya, saya hanya perlu mengganti viewForFooterInSection
metode (saya tidak mengatur yang tableFooterView
lain):
override func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
return UIView(frame: .zero)
}
Ini bekerja dengan baik untuk tableView
dengan satu bagian (jika Anda memiliki beberapa bagian, Anda perlu menentukan yang terakhir).
Jika Anda hanya memiliki satu bagian, maka cara tercepat dan termudah adalah dengan mengatur Gaya Tampilan Tabel dari "Biasa" ke "Dikelompokkan". (lihat gambar)
Jika Anda memiliki lebih banyak bagian, Anda mungkin perlu mengatur tinggi tajuk menjadi nol (tergantung selera Anda / pelanggan Anda / manajer proyek Anda)
Jika Anda memiliki lebih banyak bagian, dan tidak ingin mengacaukan header (bahkan jika itu hanya satu baris dalam kasus paling sederhana), maka Anda perlu menetapkan UIView sebagai footer, seperti yang dijelaskan dalam jawaban sebelumnya)
Cepat dan mudah 4 cara Swift.
override func viewDidLoad() {
tableView.tableFooterView = UIView(frame: .zero)
}
Jika Anda memiliki sel statis. Anda juga dapat mematikan pemisah dari jendela Inspektur. (ini tidak akan diinginkan jika Anda membutuhkan pemisah. Dalam hal ini gunakan metode yang ditunjukkan di atas)
super.viewDidLoad()
) dan termasuk dalam jawaban wiki di atas. Sedangkan untuk menghapus semua pemisah, itu sebenarnya bukan tentang pertanyaan ini, jadi lebih baik kembalikan edit terakhir Anda dan / atau hapus jawaban Anda sepenuhnya.
Jika Anda ingin menghapus ruang yang tidak diinginkan di UITableview, Anda dapat menggunakan dua metode berikut
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
return 0.1;
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
return 0.1;
}
Saya telah menambahkan ekstensi tampilan tabel kecil ini yang membantu seluruh
extension UITableView {
func removeExtraCells() {
tableFooterView = UIView(frame: .zero)
}
}
Coba dengan ini
untuk Tujuan C
- (void)viewDidLoad
{
[super viewDidLoad];
// This will remove extra separators from tableview
self.yourTableView.tableFooterView = [UIView new];
}
untuk Swift
override func viewDidLoad() {
super.viewDidLoad()
self.yourTableView.tableFooterView = UIView()
}
Jika Anda memiliki searchbar
di view
(untuk membatasi jumlah hasil misalnya), Anda juga harus menambahkan berikut ini dalam shouldReloadTableForSearchString
danshouldReloadTableForSearchScope:
controller.searchResultsTable.footerView = [ [ UIView alloc ] initWithFrame:CGRectZero ];
Dalam Swift (saya menggunakan 4.0), Anda dapat melakukannya dengan menciptakan kustom UITableViewCell
kelas, dan overriding
yang setSelected
metode. Lalu separator insets
semuanya ke 0 . (kelas utama saya dengan tampilan tabel memiliki latar belakang yang jelas) warna.
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// eliminate extra separators below UITableView
self.separatorInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
}