我有一个带有表格单元格的 Nib ,在该表格单元格内我有一个 UILabel。我想制作该标签 sizeToFit 这意味着我必须这样做:
- (void)viewDidLoad {
[self sizeToFit];
}
但是我的标签没有任何代码,只是 Controller 中变量的导出,因此我无法放置该代码来影响标签。
我尝试创建 UILabel 的子类(fitUILabel:UILabel),然后单击 Nib 中的标签并将其类设置为 fitUILabel,但它似乎没有运行。
在我的 Controller 中,在 cellForRowAtIndexPath 中的 return 语句之前,我尝试放置
[cell.myLabelOutletVariable sizeToFit]
这似乎有效,但它仅适用于回收的行,而不适用于我的表的初始单元格中包含的标签。这似乎也导致我的文本直接从单元格中流出并重叠到其他单元格上,但是它确实将其与顶部对齐,这正是我想要的。
最佳答案
我假设您的意思是您的 Nib 包含一个 UITableViewCell
作为顶级对象,并且 TableView 单元格具有一个 UILabel
subview 。
viewDidLoad
方法是在 UIViewController
上定义的,并且 UITableViewCell
不是从 UIViewController
继承的。
UITableViewCell
是 UIView
的子类。 View 调整其 subview 框架的正确位置是在其 layoutSubviews
方法中。您需要创建 UITableViewCell 的子类,并将其设置为 Nib 中单元格的自定义类。然后,在您的子类中定义此方法:
- (void)layoutSubviews {
[self.label sizeToFit];
}
在 TableView 数据源的 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
设置为 Nib 中标签的自定义类。但是让一个 View 在 layoutSubviews
中设置自己的框架对我来说似乎有点可疑,所以我通常会避免它。
关于ios - 如何为 nib 文件中包含的 UILabel 定义 ViewDidLoad 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16248441/