调整UITableViewCell中标签的位置

时间:2009-08-20 02:47:51

标签: iphone objective-c cocoa-touch iphone-sdk-3.0 uitableview

我正在使用UITableViewCell和UITableViewCellStyleSubtitle。但是,由于我用于单元格的背景图像,我不喜欢detailTextLabel的去向。我想移动它并在单元格中调整它,但我尝试的任何东西似乎都无法工作。

CGRect currRect = cell.detailTextLabel.frame;
cell.detailTextLabel.frame = CGRectMake(currRect.origin.x + 20, currRect.origin.y, currRect.size.width - 40, currRect.size.height);

我尝试将此代码放入tableView:cellForRowAtIndexPath和tableView:willDisplayCell:forRowAtIndexPath方法,但两者都不起作用。标签只是保持原样,大小相同。

调整标签的其他属性(textAlignment,backgroundColor,当然还有文本本身)也能正常工作。

如何让detailTextLabel移动到我需要的位置?

如果这很重要(虽然我不明白为什么它应该),这个特定的单元格也设置了imageView.image和backgroundImage属性。两张图片都能正确显示。

4 个答案:

答案 0 :(得分:43)

您可以尝试使用缩进和缩进级别调整标签:

cell.indentationWidth = MY_DESIRED_WIDTH;
cell.indentationLevel = 1;

(对于未缩进的单元格)

或者对于缩进的单元格只做:

cell.indentationLevel = cell.indentationLevel + 1;

这些都应该移动/缩进标签。

答案 1 :(得分:35)

您需要一个自定义的UITableViewCell子类来覆盖layoutSubviews,以完成布置其中任何子视图的脏工作。调用super然后调整detailTextLabel.frame可能是最简单的事情。

答案 2 :(得分:1)

或者,您可以将单元格从UITableViewCellStyleSubtitle更改为默认值,并将您自己的对象添加到cell.contentView并将它们放在您想要的位置。您不一定需要子类UITableViewCell(例如自定义单元格)或使用layoutSubViews。它可以在tableView:cellForRowAtIndexPath。

中完成

答案 3 :(得分:-3)

您可以使用CGAffineTransform执行此操作。将detailTextLabel右10像素推送的(未经测试的)代码看起来大致如下:

CGAffineTransform translate = CGAffineTransformMakeTranslation(10.0, 0.0); 
[detailTextLabel setTransform:translate];

虽然你可以这样做,但我认为你会更乐意创建自己的自定义UITableViewCell