6

我有一个 PostListTableCell 类,继承 UITableViewCell,用作 UITableView 中的自定义单元格。

我需要调整单元格中一些标签的大小,所以我调用了以下方法

- (void)layoutSubviews {
    [super layoutSubviews];
    [_titleLabel sizeToFit];
}

但问题是,当 UITableView 加载时,_titleLabel 没有调整大小:

在此处输入图像描述

但是在我单击此单元格并选择它之后,标题确实调整了大小:

在此处输入图像描述

以下是加载数据的代码:

- (PostListTableCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *PostListTableCellIdentifier = @"PostListTableCell";
    PostListTableCell *cell = (PostListTableCell*) [tableView dequeueReusableCellWithIdentifier:PostListTableCellIdentifier];

    if (cell == nil) {
        cell = [[PostListTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:PostListTableCellIdentifier];
    }

   Post *post = (Post*)_posts[indexPath.row];
    [cell loadPost:post];

    return cell;
}

有人可以帮忙吗?

4

3 回答 3

2

问题是自动布局再次使用您在界面构建中制作标签时设置的约束为您调整标签大小,不幸的是在自动布局下,层次结构是约束>框架

于 2013-11-07T12:35:14.853 回答
1

首先,如果您在与UIViewController及其子类相关的 ( viewDidLoad ) 方法和与UIViewUITableViewCell等相关的 ( awakeFromNib ) 中使用 Autolayout ,则在调用这些方法时,所有视图框架还没有被渲染

因此,如果您想调整任何插座的大小,您应该在 ( ViewDidAppear ) 中为UIViewController调用它。在UIViews单元格中,您应该使用:

- (void)layoutSubViews
{
     [super layoutSubviews];
}

并且不要忘记为您的调整大小方法设置间隔,如this answer中所示。

于 2016-10-22T23:04:32.287 回答
-1

为您的标签设置框架

-(void)layoutSubviews
{
    CGRect frame = CGRectMake(20, 30, 200, 50);
   _titleLabel.frame = frame;
}
于 2013-11-07T12:17:10.953 回答