UIViewTableCell中的layoutSubviews不起作用

时间:2013-11-07 11:26:17

标签: ios objective-c position label

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

我需要调整单元格中的一些标签,所以我在

中调用了以下方法
- (void)layoutSubviews {
    [super layoutSubviews];
    [_titleLabel sizeToFit];
}

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

enter image description here

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

enter image description here

以下是加载数据的代码:

- (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;
}

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:2)

问题是自动布局使用您在Interface Build中制作标签时设置的约束重新调整标签大小,不幸的是在 autolayout 下层次结构是约束>

答案 1 :(得分:1)

首先,如果您在( viewDidLoad )方法中使用Autolayout,该方法与 UIViewController 及其子类和( awakeFromNib )相关,与 UIView UITableViewCell 等有关,所有视图框架的尚未呈现,而这些方法被调用。

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

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

不要忘记间隔设置为调整大小的方法,如this answer

答案 2 :(得分:-1)

为您的标签设置框架

-(void)layoutSubviews
{
    CGRect frame = CGRectMake(20, 30, 200, 50);
   _titleLabel.frame = frame;
}