iPhone UITableViewCell:重新定位textLabel

时间:2010-06-06 16:52:30

标签: iphone uitableview

我是iPhone开发的新手,我目前正在开发一个简单的RSS阅读器应用程序。我遇到的问题是我需要在textLabel内重新定位UITableViewCells。我尝试了setFramesetCenter,但它没有做任何事情。有没有人知道我需要在tableView:cellForRowAtIndexPath:方法中做什么来重新定位单元格顶部的textLabel(x = 0,y = 0)?

谢谢

PS:UITableViewCell由名为cell的变量引用。我试过[cell setFrame:CGRectMake(0, 0, 320, 20)]没有成功。

5 个答案:

答案 0 :(得分:99)

您可以为UITableViewCell创建子类并自定义de textLabel框架。看到答案:Labels aligning in UITableViewCell。它对我来说很完美。

这是我的子类

#import "UITableViewCellFixed.h"
@implementation UITableViewCellFixed
- (void) layoutSubviews {
     [super layoutSubviews];
     self.textLabel.frame = CGRectMake(0, 0, 320, 20);
}
@end

这是我的UITableViewControllerClass:

UITableViewCellFixed *cell = (UITableViewCellFixed *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCellFixed alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}

答案 1 :(得分:21)

您可以尝试 indentationLevel separatorInset 以及UITableViewCell对象的其他内容缩进属性。

答案 2 :(得分:10)

似乎我解决了自己的问题。这是一些代码,以防有人遇到同样的问题:

UILabel *ttitle = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 20)] autorelease];
ttitle.font = [UIFont boldSystemFontOfSize:13];
ttitle.textColor    = [UIColor blackColor];
ttitle.textAlignment = UITextAlignmentLeft;

[ttitle setText:[[stories objectAtIndex: storyIndex] objectForKey: @"title"]];

[cell.contentView addSubview:ttitle];

我们的想法是创建自己的标签对象,因为textLabel是自动定位的,无法移动。

干杯。

答案 3 :(得分:9)

原始海报代码不起作用的原因是看来textLabel的框架是在从委托方法返回UITableViewCell之后设置的。

我注意到我可以成功地改变textLabel的许多属性,例如文本对齐,颜色,字体等,但是改变框架没有效果,当我稍后将框架打印到调试器时(如选择) ,框架不是我设置的。因此,我得出结论,UIKit框架在从委托方法返回后改变了textLabel的框架。毫无疑问,这可能是因为Apple工程师想要确保您的文本被绘制到屏幕上,因此他们会对其进行测量并更改框架以使其适合。他们可能认为像我们这样想要改变文本位置的人可以通过子类化或简单地添加另一个UILabel(或其他)作为子视图来实现。如果新手开发人员的文字没有出现在标签中或被截断,因为他们没有调整框架,他可能会非常困难。

就我而言,我希望文本水平居中,成为特定的颜色/字体/大小,并在单元格中垂直略高。由于懒得继承这个,我首先尝试改变框架。当这不起作用时,我尝试使用谷歌搜索答案(发现这篇文章)。

我的最终解决方案是将numberOfLines属性设置为0并将一些尾随回车符添加到我的文本中。现在这很懒惰。

答案 4 :(得分:0)

在Swift 3中它将是

override func layoutSubviews() {
    super.layoutSubviews()
    self.textLabel?.frame.origin.x = 50
}