我正在使用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属性。两张图片都能正确显示。
答案 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
。