如何设置UITableViewcell内部标签的高度?

时间:2012-11-07 16:22:29

标签: ios xcode uitableview storyboard

当我尝试在Storyboard中设置的单元格中设置标签的高度然后它可以工作,但是当我尝试设置拥有它自己的.xib文件的标签的高度时,它就不起作用了。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {



    static NSString *CellIdentifier = @"MainArticleCell";

     MainArticleCell *cell = (MainArticleCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

cell.mainArticleTitleLabel.frame = CGRectMake(0, 0, 320, 30); // NOT WORKING
...

我成功连接到标签,因为当我尝试添加文本时,它可以正常工作。

cell.mainArticleTitleLabel.text = @"lorem ipsum text";

问题出在哪里?

更新(改进说明):

当我在设置之前检查高度就像设置在IB上并且在代码中设置之后就像我设置但在模拟器中的视觉是相同的。

NSLog(@"%f", cell.mainArticleTitleLabel.frame.size.height);
cell.mainArticleTitleLabel.frame = CGRectMake(0, 117, 320, 48);
NSLog(@"%f", cell.mainArticleTitleLabel.frame.size.height);

更新2

我甚至可以改变背景颜色(但没有设置高度)

cell.mainArticleTitleLabel.backgroundColor = [UIColor redColor];
cell.mainArticleTitleLabel.frame = CGRectMake(0, 117, 320, 48); // NOT WORKING 

2 个答案:

答案 0 :(得分:0)

问题是您无法在

中执行此操作
cellForRowAtIndexPath

你必须在heightForRowAtIndexPath

中使用它

这是一个代码示例

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //in my case i get the text of the cell in an array
    NSString* theText =  [anArray objectAtIndex:indexPath.row];

    //then calculate the texte size with standard text
    CGSize textSize = [theText sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake(300, MAXFLOAT) lineBreakMode:NSLineBreakByWordWrapping];

    return textSize.height;
}

如果在iOS 6中使用属性文本

CGRect rectSize = [theText boundingRectWithSize:CGSizeMake(labelWidth, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin context:NULL];

并返回

return rectSize.size.height;

我在我的代码中使用它,它适用于动态单元格高度。

修改

我读了不同的评论。看来我的答案毫无用处,因为你的问题不在于返回heightForRowAtIndexPath中的值,因为你已经在做了。你的问题是它在故事板中工作而不是单个xib。那时我没有帮助。

答案 1 :(得分:0)

经过多次尝试后,我放弃了这种方式,并尝试在故事板上通过TableView添加一个单元格并添加自定义类,并且它可以正常工作。