iPhone UITableViewCell:重新定位textLabel

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

谢谢

PS: UITableViewCell被称为cell的variables引用。 我试过[cell setFrame:CGRectMake(0, 0, 320, 20)]没有成功。

您可以为UITableViewCell创build一个子类并自定义de textLabel框架。 看到答案: 标签在UITableViewCell中alignment 。 这对我来说是完美的。

这是我的子类

 #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]; } 

您可以尝试UITableViewCell对象的indentationLevelseparatorInset和其他内容缩进属性。

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

 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]; 

这个想法是创build自己的标签对象,因为textLabel自动定位,不能移动。

干杯。

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

我注意到,我可以成功地改变textLabel的许多属性,如文本的alignment方式,颜色,字体等,但改变框架没有任何影响,当我打印框架后debugging(如select),框架不是我设定的。 因此,我得出这样的结论:UIKit框架在从委托方法返回之后正在改变textLabel的框架。 毫无疑问,这可能是因为苹果公司的工程师想要确保你的文本被绘制到屏幕上,所以他们测量它,并改变框架,使其适合。 他们可能认为,像我们这样想改变文本位置的人可以通过子类化,或者简单地添加另一个UILabel(或其他)作为子视图。 如果新手开发者的文本没有出现在标签中,或者因为他们没有调整框架而被截断,那么新手开发者可能会非常困难。

在我的情况下,我希望文本是水平中心,是一个特定的颜色/字体/大小,并在单元格中垂直稍高。 由于太懒惰,无法将其细分,所以我首先尝试改变框架。 当这不起作用,我试着用Googlesearch答案(find这篇文章)。

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

在Swift 3中是这样的

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