Saya menggunakan UITableViewCell khusus yang memiliki beberapa label, tombol, dan tampilan gambar untuk ditampilkan. Ada satu label di sel yang teksnya adalah NSString
objek dan panjang string bisa variabel. Karena ini, saya tidak dapat menetapkan tinggi konstan ke sel dalam metode UITableView
's heightForCellAtIndex
. Tinggi sel tergantung pada ketinggian label yang dapat ditentukan dengan menggunakan NSString
's sizeWithFont
metode. Saya mencoba menggunakannya, tetapi sepertinya saya salah di suatu tempat. Bagaimana bisa diperbaiki?
Berikut adalah kode yang digunakan untuk menginisialisasi sel.
if (self = [super initWithFrame:frame reuseIdentifier:reuseIdentifier])
{
self.selectionStyle = UITableViewCellSelectionStyleNone;
UIImage *image = [UIImage imageNamed:@"dot.png"];
imageView = [[UIImageView alloc] initWithImage:image];
imageView.frame = CGRectMake(45.0,10.0,10,10);
headingTxt = [[UILabel alloc] initWithFrame: CGRectMake(60.0,0.0,150.0,post_hdg_ht)];
[headingTxt setContentMode: UIViewContentModeCenter];
headingTxt.text = postData.user_f_name;
headingTxt.font = [UIFont boldSystemFontOfSize:13];
headingTxt.textAlignment = UITextAlignmentLeft;
headingTxt.textColor = [UIColor blackColor];
dateTxt = [[UILabel alloc] initWithFrame:CGRectMake(55.0,23.0,150.0,post_date_ht)];
dateTxt.text = postData.created_dtm;
dateTxt.font = [UIFont italicSystemFontOfSize:11];
dateTxt.textAlignment = UITextAlignmentLeft;
dateTxt.textColor = [UIColor grayColor];
NSString * text1 = postData.post_body;
NSLog(@"text length = %d",[text1 length]);
CGRect bounds = [UIScreen mainScreen].bounds;
CGFloat tableViewWidth;
CGFloat width = 0;
tableViewWidth = bounds.size.width/2;
width = tableViewWidth - 40; //fudge factor
//CGSize textSize = {width, 20000.0f}; //width and height of text area
CGSize textSize = {245.0, 20000.0f}; //width and height of text area
CGSize size1 = [text1 sizeWithFont:[UIFont systemFontOfSize:11.0f]
constrainedToSize:textSize lineBreakMode:UILineBreakModeWordWrap];
CGFloat ht = MAX(size1.height, 28);
textView = [[UILabel alloc] initWithFrame:CGRectMake(55.0,42.0,245.0,ht)];
textView.text = postData.post_body;
textView.font = [UIFont systemFontOfSize:11];
textView.textAlignment = UITextAlignmentLeft;
textView.textColor = [UIColor blackColor];
textView.lineBreakMode = UILineBreakModeWordWrap;
textView.numberOfLines = 3;
textView.autoresizesSubviews = YES;
[self.contentView addSubview:imageView];
[self.contentView addSubview:textView];
[self.contentView addSubview:webView];
[self.contentView addSubview:dateTxt];
[self.contentView addSubview:headingTxt];
[self.contentView sizeToFit];
[imageView release];
[textView release];
[webView release];
[dateTxt release];
[headingTxt release];
}
Ini adalah label yang tinggi dan lebarnya salah:
textView = [[UILabel alloc] initWithFrame:CGRectMake(55.0,42.0,245.0,ht)];
sumber
Jika semua baris Anda sama tingginya, cukup tetapkan
rowHeight
properti UITableView daripada menerapkanheightForRowAtIndexPath
. Apple Documents:sumber
tableView.rowHeight
disetel,heightForRowAtIndexPath
tidak akan dipanggil, jika Anda mencoba mencari tahu mengapa (seperti saya).dalam UITableViewCell kustom -controller tambahkan ini
Dalam UITableView -controller tambahkan ini
sumber
sumber
sumber
Saya melihat banyak solusi tetapi semuanya salah atau tidak lengkap. Anda dapat menyelesaikan semua masalah dengan 5 baris di viewDidLoad dan autolayout. Ini untuk objektif C:
Untuk swift 2.0:
Sekarang buat sel Anda dengan xib atau menjadi tableview di Storyboard Anda. Dengan ini Anda tidak perlu menerapkan apa-apa lagi atau menimpanya. (Jangan lupa nomor os baris 0) dan label bawah (membatasi) downgrade "Prioritas Konten Memeluk - Vertikal ke 250"
Anda dapat memuat kode di url berikutnya: https://github.com/jposes22/exampleTableCellCustomHeight
sumber
Untuk mengatur dimensi otomatis untuk tinggi baris & perkiraan tinggi baris, pastikan langkah-langkah berikut untuk membuat, dimensi otomatis efektif untuk tata letak tinggi sel / baris.
UITableViewAutomaticDimension
ke rowHeight & estimasiRowHeightheightForRowAt
dan mengembalikan nilaiUITableViewAutomaticDimension
ke sana)-
Sasaran C:
Cepat:
Untuk contoh label di UITableviewCell
Catatan : Jika Anda memiliki lebih dari satu label (UIElements) dengan panjang dinamis, yang harus disesuaikan dengan ukuran kontennya: Sesuaikan 'Prioritas Pelukan Konten dan Ketahanan Kompresi` untuk label yang ingin Anda perluas / kompres dengan prioritas lebih tinggi.
Di sini, dalam contoh ini saya menetapkan prioritas pelukan rendah dan resistensi kompresi tinggi, yang mengarah pada menetapkan lebih banyak prioritas / kepentingan untuk isi label kedua (kuning).
sumber
Berkat semua posting pada topik ini, ada beberapa cara yang sangat membantu untuk menyesuaikan rowHeight dari UITableViewCell.
Berikut adalah kompilasi dari beberapa konsep dari orang lain yang benar-benar membantu ketika membangun iPhone dan iPad. Anda juga dapat mengakses berbagai bagian dan menyesuaikannya sesuai dengan berbagai ukuran tampilan.
sumber
Untuk memiliki tinggi sel dinamis ketika teks Label meningkat, pertama-tama Anda harus menghitung tinggi, bahwa teks akan digunakan dalam
-heightForRowAtIndexPath
metode delegasi dan mengembalikannya dengan ketinggian tambahan dari lables lain, gambar (tinggi maksimum teks + tinggi statis lain) komponen) dan gunakan ketinggian yang sama dalam pembuatan sel.sumber