iPhone UITableViewCell:重新定位textLabel
我是iPhone新手,我目前正在研究一个简单的RSS阅读器应用程序。 我遇到的问题是我需要重新定位UITableViewCells
内的textLabel
。 我已经尝试setFrame
或setCenter
但它什么也没有做。 有没有人知道我需要做什么在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对象的indentationLevel , separatorInset和其他内容缩进属性。
似乎我解决了我自己的问题。 这里有一些代码,以防有人遇到同样的问题:
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 }