Saya telah mengerjakan ini selama sekitar 2 hari, jadi saya pikir saya berbagi pembelajaran saya dengan Anda.
Pertanyaannya adalah: Apakah mungkin membuat lebar sel dalam UITableView yang dikelompokkan menjadi lebih kecil?
Jawabannya adalah tidak.
Tetapi ada dua cara untuk mengatasi masalah ini.
Solusi # 1: Tabel yang lebih tipis Anda dapat mengubah bingkai tableView, sehingga tabel akan menjadi lebih kecil. Ini akan menghasilkan UITableView merender sel di dalamnya dengan lebar yang diperkecil.
Solusi untuk ini dapat terlihat seperti ini:
-(void)viewWillAppear:(BOOL)animated
{
CGFloat tableBorderLeft = 20;
CGFloat tableBorderRight = 20;
CGRect tableRect = self.view.frame;
tableRect.origin.x += tableBorderLeft; // make the table begin a few pixels right from its origin
tableRect.size.width -= tableBorderLeft + tableBorderRight; // reduce the width of the table
tableView.frame = tableRect;
}
Solusi # 2: Memiliki sel yang dirender oleh gambar
Solusi ini dijelaskan di sini: http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html
Saya harap informasi ini bermanfaat untuk Anda. Saya membutuhkan waktu sekitar 2 hari untuk mencoba banyak kemungkinan. Inilah yang tersisa.
sumber
Jawaban:
Cara yang lebih baik dan lebih bersih untuk mencapai ini adalah subclass UITableViewCell dan mengganti
-setFrame:
metodenya seperti ini:Mengapa lebih baik? Karena dua lainnya lebih buruk.
Sesuaikan lebar tampilan tabel
-viewWillAppear:
Pertama-tama, ini tidak dapat diandalkan, superview atau pengontrol tampilan induk dapat menyesuaikan bingkai tampilan tabel lebih lanjut setelah
-viewWillAppear:
dipanggil. Tentu saja, Anda dapat membuat subkelas dan mengganti-setFrame:
untuk UITableView Anda seperti yang saya lakukan di sini untuk UITableViewCells. Namun, subclass UITableViewCells adalah cara yang lebih umum, ringan, dan Apple.Kedua, jika UITableView Anda memiliki backgroundView, Anda tidak ingin backgroundView-nya dipersempit bersamaan. Menjaga lebar backgroundView sambil mempersempit lebar UITableView bukanlah pekerjaan yang mudah, belum lagi memperluas subview di luar superview bukanlah hal yang sangat elegan untuk dilakukan.
Rendering sel kustom untuk memalsukan lebar yang lebih sempit
Untuk melakukan ini, Anda harus menyiapkan gambar latar belakang khusus dengan margin horizontal, dan Anda harus membuat tata letak subview sel sendiri untuk mengakomodasi margin tersebut. Sebagai perbandingan, jika Anda hanya menyesuaikan lebar seluruh sel, pengaturan otomatis akan melakukan semua pekerjaan untuk Anda.
sumber
Untuk melakukan ini di Swift, yang tidak menyediakan metode untuk menyetel variabel, Anda harus mengganti penyetel untuk
frame
. Awalnya diposting (setidaknya di tempat saya menemukannya) di sinisumber
Jika tidak ada yang berhasil, Anda dapat mencoba ini
Jadikan warna background sel sebagai warna bening lalu letakkan gambar sel dengan ukuran yang diinginkan. Jika Anda ingin menampilkan beberapa teks di sel itu, beri label di atas gambar. Jangan lupa juga untuk mengatur warna background label menjadi warna yang jelas.
sumber
Saya menemukan solusi yang diterima tidak berfungsi pada rotasi. Untuk mencapai UITableViewCells dengan lebar tetap & margin fleksibel, saya baru saja mengadaptasi solusi di atas menjadi berikut:
Metode dipanggil setiap kali perangkat berputar, jadi sel akan selalu berada di tengah.
sumber
Ada metode yang dipanggil saat layar diputar: viewWillTransitionToSize
Di sinilah Anda harus mengubah ukuran bingkai. Lihat contoh. Ubah coord bingkai sesuai kebutuhan.
sumber
saya melakukannya di
Dan ini berhasil untuk saya
sumber
Dalam file .h tambahkan delegasi 'UITableViewDataSource'
sumber