Iphone UITableViewCell不显示全文

Iphone UITableViewCell不显示全文,iphone,ios,objective-c,cocoa-touch,Iphone,Ios,Objective C,Cocoa Touch,我有一个表格视图,但没有一个单元格显示更长的文本。更奇怪的是,这似乎并不是一个设定值,他们停下来。某些单元格在被截断之前显示的文本比其他单元格多NSLog()确认字符串设置正确 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { //code for getting string removed for readability

我有一个
表格视图
,但没有一个单元格显示更长的文本。更奇怪的是,这似乎并不是一个设定值,他们停下来。某些单元格在被截断之前显示的文本比其他单元格多
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行,不再是了。我怎样才能使它们调整到所需的行数?谢谢。

我想为了让它显示更多的行,你必须调整cell.textlabel和cell本身的边框大小。你必须使他们的框架尺寸更高,以适应新的文本。如果只适合两行文字,它将显示的就这些。您必须根据需要的线条以编程方式调整高度


这里有一个例子给一个家伙,他展示了如何根据行数使帧大小动态化。

我建议将UITableViewCell子类化。 不要对cellForRowAtIndexPath进行太多更改,但是

cell = [[MyVeryOwnTableCell alloc] initWithStyle:UITableViewCellStyleDefault 
reuseIdentifier:cellIdentifier];
假设
UITableViewCell
的子类是
MyVeryOwnTableCell

在MyVeryOwnTableCell的实现中,应该覆盖layoutSubViews方法。首先调用
[super layoutSubViews]
,然后相应地重新排列textLabel的框架。您可能不需要更改位置,但需要更改高度和线条数。另外,您可能需要设置适当的lineBreakMode。详见文档。

按照此模式计算文本的大小:

CGSize textSize;
textSize = [textLabel.text sizeWithFont:... constraintToSize:
CGSizeMake(300.0f, 10000.0f) lineBreakMode: ...];
您可以在单元格实现的LayoutSubview中执行此操作,如果单元格的总大小太小,则当您必须覆盖heightForRowAtIndexPath时,您可能必须以类似的方式使用它

这里的诀窍是,在开始时,你给的大小限制正好是你的UILabel的宽度(因此300.0可能不适合你)加上一些或多或少的无限高度。返回文本所需的实际大小(本例中最大为10000)。然后使用该高度/大小分别设置标签的实际大小,以计算显示文本和其他可能附加项目所需的单元格总高度

示例:

textLabel setFrame:CGRectMake(10.0f, 10.0f, 300.0f, textSize.height);

关于300.0f。如果仍要使用UITableViewCell的自动布局功能(在设置图像时动态重新对齐标签),请将其替换为textLabel.frame.size.width。

您必须在运行时通过计算单元格标签wrt字符串的高度来调整每行的高度

下面的函数给出了标签的u大小和表视图单元格的固定宽度

-  (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高度,如果行是动态的,则每当创建行时,它将首先调整其高度


我希望这能解决您的问题。

[nsstringwithformat:@“%@”,fulltext
是不必要的,只需使用
fulltext
。是的,我在实验时这样做了,现在刚刚捕获到它,并将其更改为。我还添加了cell.textlab.lineBreakMode=UILineBreakModeWordWrap;但它仍然没有包装。您可能需要将单元格高度调大,同时将UILabel高度调大。只需将单元格高度放大是不够的。标签也必须更改。它的高度以及(可能是)它显示的行数。RowLBlHight和rowSize在哪里声明?哦,这是我的错,这是我代码中的一个额外行。您不需要该行,请删除它。我还编辑了我的ans