Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 调整UITableViewCell中标签的位置_Iphone_Objective C_Cocoa Touch_Iphone Sdk 3.0_Uitableview - Fatal编程技术网

Iphone 调整UITableViewCell中标签的位置

Iphone 调整UITableViewCell中标签的位置,iphone,objective-c,cocoa-touch,iphone-sdk-3.0,uitableview,Iphone,Objective C,Cocoa Touch,Iphone Sdk 3.0,Uitableview,我正在使用带有UITableViewCellStyleSubtitle的UITableViewCell。但是,由于我在单元格中使用的背景图像,我不喜欢detailTextLabel的位置。我想在单元格内移动它并调整它的大小,但我尝试的任何操作似乎都不起作用 CGRect currRect = cell.detailTextLabel.frame; cell.detailTextLabel.frame = CGRectMake(currRect.origin.x + 20, currRect.or

我正在使用带有UITableViewCellStyleSubtitle的UITableViewCell。但是,由于我在单元格中使用的背景图像,我不喜欢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属性。两个图像都显示正确。

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

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

您可能可以使用
cAffineTransform
来完成。将
detailTextLabel
向右推10像素的(未测试)代码大致如下:

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

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

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

cell.indentationWidth = MY_DESIRED_WIDTH;
cell.indentationLevel = 1;
(对于未插入的单元格)

或者对于缩进单元格,只需执行以下操作:

cell.indentationLevel = cell.indentationLevel + 1;

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

谢谢。我知道你已经可以这样做了,但我不知道必须重写的是layoutSubviews方法。这是一个很好的建议。然而,我仍然存在这个问题,例如,虽然我可以自定义标签尺寸,但我无法将其转到wordwrap并显示多行,即:self.textlab.numberOfLines=2;self.textLabel.lineBreakMode=UILineBreakModeWordWrap;.textLabel属性的行为应该与任何其他UILabel相同,因此可能您没有给它足够的垂直空间?这对我来说是可行的,但我也将我的内容移到了我的单元格之外,然后被上面的单元格剪切-这让我问到了这个问题,我添加了我的最终解决方案:不起作用。显然,如果不对单元格进行子类化,则无法以任何方式调整子视图的位置。请尝试此操作。然后主标签移动到单元格的中心,并且它也不能移动。子类化似乎不那么麻烦。这非常有效,因为它意味着对于某些布局(在左侧有一个图像),您不需要添加自己的标签来替换现有的标签。谢谢。很好的回答,很高兴终于知道这样的事情存在!值得注意的是,
cell.indentationWidth
可以是负数,这意味着如果只需要将整个contentView向左移动,就不需要对单元格进行子类化。