iPhone UITableViewCell:重新定位 textLabel

Posted

技术标签:

【中文标题】iPhone UITableViewCell:重新定位 textLabel【英文标题】:iPhone UITableViewCell: repositioning the textLabel 【发布时间】:2010-06-06 16:52:29 【问题描述】:

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

谢谢

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

你真的应该将标签框架设置为self.contentView.bounds【参考方案2】:

你可以试试UITableViewCell对象的indentationLevelseparatorInset等内容缩进属性。

【讨论】:

【参考方案3】:

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

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 是自动定位的,不能四处移动。

干杯。

【讨论】:

当您删除单元格并将单元格添加到表格时,这也会中断,因为 UILabel 没有被正确删除。 解决此问题的一种方法是标记子视图并在通过迭代子视图使单元格出列后将其删除。基本上我们应该只是子类化,在 cellForRowAtIndexPath 上添加子视图更懒,而且更危险的内存【参考方案4】:

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

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

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

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

【讨论】:

由于很好地总结了这个问题而被投赞成票。最终的解决方案是可怕的 ;-)【参考方案5】:

在 Swift 3 中

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

【讨论】:

以上是关于iPhone UITableViewCell:重新定位 textLabel的主要内容,如果未能解决你的问题,请参考以下文章

iPhone - 选择后 UITableViewCell 白色

iPhone - 在 UITableViewCell 中移动 detailTextLabel

iPhone如何实现一个“宽”的UITableViewCell?

在 iPhone 中动态更改 UITableviewCell 高度?

UiTableViewCell 动态高度适用于 iphone 而不是 ipad 大小类

iPhone:更改来自 NIB 的 UITableViewCell 的高度