0

我有一个带有表格单元格的笔尖,在该表格单元格中我有一个 UILabel。我想制作该标签 sizeToFit 这意味着我必须这样做:

- (void)viewDidLoad {
    [self sizeToFit];
}

但是我的标签没有任何代码,只是控制器中变量的出口,所以我无法放置该代码来影响标签。

我尝试创建一个 UILabel 的子类(fitUILabel:UILabel),然后单击笔尖中的标签并将其类设置为 fitUILabel,但它似乎没有运行。

在我的控制器中,在 cellForRowAtIndexPath 中的 return 语句之前,我尝试将

 [cell.myLabelOutletVariable sizeToFit]

这似乎有效,但是它仅适用于回收的行,而不适用于我表的初始单元格中包含的标签。这似乎也导致我的文本直接从单元格中流出并重叠到其他单元格上,但是它确实将它与我想要的顶部对齐。

4

3 回答 3

1

我假设您的意思是您的 nib 包含 aUITableViewCell作为顶级对象,并且表格视图单元格具有UILabel子视图。

viewDidLoad方法在 上定义UIViewController,并且UITableViewCell不继承自UIViewController

UITableViewCell是 的子类UIView。视图调整其子视图框架的适当位置是在其layoutSubviews方法中。您需要创建 的子类UITableViewCell,并将其设置为 nib 中单元格的自定义类。然后,在您的子类中,定义此方法:

- (void)layoutSubviews {
    [self.label sizeToFit];
}

在表格视图数据源的tableView:cellForRowAtIndexPath:方法中,您可能希望setNeedsLayout在设置标签文本后发送到单元格。layoutSubviews如果单元被重用,这将确保单元再次接收。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    MyCell *cell = ...;

    cell.customLabel.text = [self labelTextForIndexPath:indexPath];
    [cell setNeedsLayout];
    return cell;
}

或者,您可以创建一个UILabel子类,如下所示:

@implementation MyLabel

- (void)layoutSubviews {
    [self sizeToFit];
}

- (void)setText:(NSString *)text {
    [super setText:text];
    [self setNeedsLayout];
}

@end

然后MyLabel在您的笔尖中设置为标签的自定义类。但是让视图设置自己的框架layoutSubviews对我来说似乎有点可疑,所以我通常会避免它。

于 2013-04-27T05:05:57.140 回答
0

您应该将标签大小的代码放在表格视图的委托方法 CellForRowAtIndexPath 中,而不是放在 viewDidLoad 中。如果您的标签在表格视图单元格中。

于 2013-04-27T05:03:07.083 回答
0

您可以重写 -(void) awakeFromNib 方法来初始化标签。

于 2013-04-27T05:39:25.920 回答