我有tableview
,但没有一个单元格显示较长的文字。更奇怪的是它似乎不是他们所停留的固定值。在切断之前,某些单元格显示的文本比其他单元格更多。 NSLog()
确认字符串已正确设置。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
//code for getting string removed for readability
// Identifier for retrieving reusable cells.
static NSString *cellIdentifier = @"MyCellIdentifier";
// Attempt to request the reusable cell.
cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
// No cell available - create one.
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
// format it
cell.textLabel.numberOfLines = 0;
cell.textLabel.font = [UIFont systemFontOfSize:12.0];
cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
}
// Set the text of the cell to the row index.
cell.textLabel.text = fulltext;
return cell;
}
我的印象是numberOfLines
处的0
函数会处理它,但所有单元格都在2行,不再是。如何根据需要调整它们?感谢。
答案 0 :(得分:1)
我建议继承UITableViewCell。 不要对cellForRowAtIndexPath做太多改动,而是
cell = [[MyVeryOwnTableCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:cellIdentifier];
假设您的UITableViewCell
的子类是MyVeryOwnTableCell
。
在MyVeryOwnTableCell的实现中,您应该覆盖layoutSubViews方法。首先调用[super layoutSubViews]
,然后相应地重新排列textLabel的框架。您可能不需要更改位置,而是更改高度和numberOfLines。另外,您可能想要设置适当的lineBreakMode。有关详细信息,请参阅文档。
http://developer.apple.com/library/ios/#documentation/uikit/reference/UILabel_Class/Reference/UILabel.html
计算此模式后的文本大小:
CGSize textSize;
textSize = [textLabel.text sizeWithFont:... constraintToSize:
CGSizeMake(300.0f, 10000.0f) lineBreakMode: ...];
您在单元格实现的layoutSubViews中执行此操作,如果单元格的总大小太小,则必须在覆盖heightForRowAtIndexPath时以类似的方式使用它。
这里的诀窍是,在开始时,你的UILabel的宽度恰好是尺寸约束(因此300.0可能不适合你)加上一些或多或少的无限高度。您将返回文本所需的实际大小(在这种情况下最多为10000)。然后使用该高度/大小分别设置标签的实际尺寸,以计算显示文本和可能的其他附加项所需的单元的总高度。
示例:强>
textLabel setFrame:CGRectMake(10.0f, 10.0f, 300.0f, textSize.height);
关于300.0f。如果您仍想使用UITableViewCell的自动布局功能(在设置图像的情况下动态地重新对齐标签),则将其替换为textLabel.frame.size.width。
答案 1 :(得分:0)
我认为为了让它显示更多行,你必须调整cell.textlabel和cell本身的帧大小。您必须使其框架尺寸更高以适应新文本。如果只有两行文字适合,那就是它的全部内容。您必须根据所需的行以编程方式调整高度。
这是一个link给一个人,他根据行数显示如何使帧大小动态。
答案 2 :(得分:0)
您必须通过计算单元格标签字符串的高度来调整运行时每行的高度。
以下函数给出了具有固定宽度的表格视图单元的大小标签
- (CGSize) calculateLabelHeightWith:(CGFloat)width text:(NSString*)textString
{
CGSize maximumSize = CGSizeMake(width, 9999);
CGSize size = [textString sizeWithFont:[UIFont fontWithName:@"HelveticaNeue-Medium" size:14]
constrainedToSize:maximumSize
lineBreakMode:UILineBreakModeWordWrap];
return size;
}
使用表格单元格高度委托方法
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
//Get String for corresponding Row
NSString *stringObject=fullText;
//here i ave taken row width 320
CGSize rowSize=[Utils calculateLabelHeightWith:320 text:stringObject];
return (rowSize.height+20);
}
这将调整te高度,如果每次创建行时动态行,它将首先调整其高度。
我希望这能解决你的问题。