2010-06-06 84 views
37

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

谢谢

PS:本UITableViewCell是由一种叫做cell变量引用。我试过[cell setFrame:CGRectMake(0, 0, 320, 20)]没有成功。

回答

97

您可以为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]; 
} 
+0

这工作绝对非常:) – Domness 2011-08-20 08:57:21

+0

你真的应该设置标签帧为'self.contentView.bounds' – 2016-05-24 05:52:51

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自动定位,不能左右移动。

干杯。

+6

但这也打破,当你删除和添加细胞的表作为的UILabel没有得到正确删除。 – Domness 2011-08-18 18:13:39

+0

解决此问题的一种方法是标记子视图,并通过迭代子视图使该单元出列后将其删除。基本上我们应该只是子类化,在cellForRowAtIndexPath的子视图添加是更懒,更危险的记忆明智 – gillyD 2013-08-14 07:37:54

9

究其原因,原来的海报的代码不起作用的是,它似乎是在为textLabel的框架中的UITableViewCell后置已从您的委托方法返回。

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

在我的情况下,我希望文字水平居中,成为特定的颜色/字体/大小,并在单元格中垂直稍高。由于太懒惰而无法将其细分,我首先尝试改变框架。当这不起作用时,我试着用Google搜索答案(找到这篇文章)。

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

+6

Upvoted由于是对这个问题的一个很好的总结。最终的解决方案虽然可怕;-) – 2012-10-17 12:58:58

21

您可以尝试indentationLevelseparatorInset和的UITableViewCell对象的其他内容压痕性能。

+0

最简单的方法。 (y)的 – 2013-11-08 13:41:58

0

在斯威夫特3这将是

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