我想在UITableView中包装单元格的文本。我正在使用以下代码,但是现在如何动态更改单元格的高度,单元格的对齐现在不正确?我注意到tableView委托中有一个内置方法 - (CGFloat)cellHeightForRow但我可以动态接收文本并设置高度,因为我的JSON数据中有可变长度的文本
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}
[cell.textLabel sizeToFit];
cell = [[[UITableViewCell alloc]
initWithStyle: UITableViewCellStyleSubtitle
reuseIdentifier: @"UITableViewCell"] autorelease];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
NSDictionary *person = [myPeople objectAtIndex:[indexPath row]];
NSString *name = [person valueForKey:@"name"];
cell.detailTextLabel.text = [person valueForKey:@"time"];
return cell;
}
这是我到目前为止所尝试的:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSDictionary *person = [myPeople objectAtIndex:[indexPath row]];
NSString *cellText =[person valueForKey:@"text"];
UIFont *cellFont = [UIFont fontWithName:@"Helvetica-neuve" size:21.0];
CGSize constraintSize = CGSizeMake(280.0f, MAXFLOAT);
CGSize labelSize = [cellText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];
int buffer = 10;
return labelSize.height + buffer;
}
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [commentView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
cell.textLabel.numberOfLines = 6;
cell.textLabel.font = [UIFont fontWithName:@"Helvetica-neuve" size:21.0];
[cell.textLabel setMinimumFontSize:13.0];
[cell.textLabel setAdjustsFontSizeToFitWidth:NO];
}
NSDictionary *person = [myPeople objectAtIndex:[indexPath row]];
NSString *personName = [person valueForKey:@"text"];
cell.textLabel.text = personName;
// cell.detailTextLabel.text = [person valueForKey:@"date"];
return cell;
}
输出仍然看起来太紧凑和紧张
答案 0 :(得分:15)
在cellForRowAtIndexPath
:功能中。第一次创建单元格时:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
cell.textLabel.numberOfLines = 0;
cell.textLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:21.0];
}
您会注意到我也将标签的行数设置为0.这样可以使用尽可能多的行。
您还需要指定UITableViewCell
的大小,在heightForRowAtIndexPath
函数中也是如此:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *cellText = @"some text which is part of cell display";
UIFont *cellFont = [UIFont fontWithName:@"HelveticaNeue" size:21.0];
CGSize constraintSize = CGSizeMake(280.0f, MAXFLOAT);
CGSize labelSize = [cellText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];
int buffer = 10;
return labelSize.height + buffer;
}
我在返回的单元格高度上添加了额外的10
,因为我喜欢在文本周围添加一点缓冲区。
更新:如果输出看起来太紧& clumpsy然后这样做 -
[cell.textLabel setMinimumFontSize:13.0];
[cell.textLabel setAdjustsFontSizeToFitWidth:NO];
这可以解决您的问题。
答案 1 :(得分:0)
要更改单元格的高度,您需要在cellForRowAtIndexPath中更改其框架,并确保标签具有正确的自动调整大小标记。