ios - 如何为 nib 文件中包含的 UILabel 定义 ViewDidLoad 方法?

标签 ios xcode nib viewdidload

我有一个带有表格单元格的 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 继承的。

UITableViewCellUIView 的子类。 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/

相关文章:

xcode - 如何从 Xcode 中的 shell 脚本文件运行脚本?

macos - 从 "NIBArchive".nib 文件中提取可翻译字符串

iphone - 从 XIB 创建时如何构建 UIImage?

ios - 如何在 Xcode 9 中在 iOS 设备上运行我的应用程序?

objective-c - ios 将 block 用于 Assets 库

ios - 占位符检查在某些情况下有效,而在某些情况下则无效

iOS UIInputViewController : present Custom UIViewController + NIB

ios - 带点减去 Int 的 Int 值

iphone - UIPickerView ios 问题 - 无法识别的选择器

ios - 如何将自定义 UICollectinViewCell 注册到 xib 文件中自定义 View 内构建的 UICollectionView