テーブルビュー内のセルの可変高さを設定します
-
27-10-2019 - |
質問
TableViewをロードしています。私のテーブルビューの各セルは、データに応じてさまざまな高さを持つ必要があります。以下のコードでは、テーブルの各行に連絡先を表示しています。各連絡先には複数の電話番号がある場合があります。各セルに電話番号が付いた連絡先を表示しています。したがって、各連絡先の電話番号の数に応じて、セルの高さが変わります。テーブルに連絡先を表示するために、次のコードを書きました。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{
NSArray *contactsInSection = [sectionsArray objectAtIndex:indexPath.section];
ContactsHelper *contact = [contactsInSection objectAtIndex:indexPath.row];
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
UIButton *checkBox = [[UIButton alloc] init];
checkBox.tag = contact.contactID;
[cell.contentView addSubview:checkBox];
[checkBox setFrame:CGRectMake(6,14,20,20)];
[checkBox release];
UILabel *CellTextlabel = [[UILabel alloc] init];
CellTextlabel.tag = 222;
[CellTextlabel setFrame:CGRectMake(40, 5, 200, 20)];
[cell.contentView addSubview:CellTextlabel];
[CellTextlabel release];
UILabel *detailcellTextlabel = [[UILabel alloc] init];
detailcellTextlabel.tag = 333;
[detailcellTextlabel setFrame:CGRectMake(40, 24, 200, 20)];
detailcellTextlabel.font = [UIFont boldSystemFontOfSize:12];
detailcellTextlabel.textColor = [UIColor grayColor];
[[cell contentView] addSubview:detailcellTextlabel];
[detailcellTextlabel release];
}
ABAddressBookRef addressbook = ABAddressBookCreate();
ABRecordRef person = ABAddressBookGetPersonWithRecordID(addressbook,contact.contactID);
UIButton *checkBox = (UIButton *)[cell.contentView viewWithTag:contact.contactID];
if(isActivDeactivButton)
{
[checkBox setImage:[UIImage imageNamed:@"disabled_checkbox.png"] forState:UIControlStateNormal];
}
else{
[checkBox setImage:[UIImage imageNamed:@"selected_checkbox.png"] forState:UIControlStateNormal];
}
[checkBox addTarget:self action:@selector(checkBoxSelected:) forControlEvents: UIControlEventTouchUpInside];
UILabel *editCellTextlabel = (UILabel *)[cell.contentView viewWithTag:222];
editCellTextlabel.font = [UIFont boldSystemFontOfSize:18];
UILabel *detailcellTextlabel = (UILabel *)[cell.contentView viewWithTag:333];
if (sendSMS) {
NSMutableArray *phoneNumberEntries = [[[NSMutableArray alloc] init] autorelease];
editCellTextlabel.text = contact.lastName;
ABMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty);
numberOfLines = ABMultiValueGetCount(phoneNumbers);
for (int i = 0; i < ABMultiValueGetCount(phoneNumbers) ; i++) {
CFStringRef phoneNoEntries = ABMultiValueCopyValueAtIndex(phoneNumbers, i);
NSString *phoneNumber = (NSString *) phoneNoEntries;
[phoneNumberEntries addObject:phoneNumber];
// NSLog(@"email id %@", detailcellTextlabel.text);
CFRelease(phoneNoEntries);
}
detailcellTextlabel.numberOfLines = ABMultiValueGetCount(phoneNumbers);
[detailcellTextlabel setFrame:CGRectMake(40, 24, 200, 20 + 20 * [phoneNumberEntries count])];
detailcellTextlabel.lineBreakMode = UILineBreakModeWordWrap;
detailcellTextlabel.lineBreakMode = UILineBreakModeWordWrap;
detailcellTextlabel.numberOfLines = numberOfLines;
detailcellTextlabel.text = [phoneNumberEntries componentsJoinedByString:@"\n"];
// NSLog(@"email id %@", detailcellTextlabel.text);
CFRelease(phoneNumbers);
}
CFRelease(addressbook);
return cell;
}
セルの高さを正しく設定する方法を見つけることができません。私は実装しました
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
メソッドを委任し、さまざまなロジックを試しました。しかし、私は列の高さを正しく設定することができません。 1つの問題は、indexpath.section値であるように見えます。これは、両方の委任方法で変化する傾向があります。この場合、助けが必要です。
解決
使用できます: - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
セルのセクション/行に従って行の高さを設定します。
例えば:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
switch(indexPath.row){
case:0
return 100;
break;
case:1
return 200;
break;
}
}
等....
1セクション以上がある場合は、これを試してみてください
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
switch(indexPath.section){
case:0
switch(indexPath.row){
case:0
return 100;
break;
case:1
return 200;
break;
}
break;
case:1
switch(indexPath.row){
case:0
return 100;
break;
case:1
return 200;
break;
}
break;
}
}
シャニ
他のヒント
TableView Cellの標準的な高さを取得します。その高さ以上のレーベルを取得しますhieight + TableView Cellの高さ
これを使用できると思います
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
int height = 40 //standard height
if (tableview cell label height >40){
height = tableview cell label height;
}
return height;
}
所属していません StackOverflow