自动布局和 UILabel 的问题

Posted

技术标签:

【中文标题】自动布局和 UILabel 的问题【英文标题】:Issue with Autolayout and UILabel 【发布时间】:2014-12-27 22:41:52 【问题描述】:

我有一个包含 UItableView 的 UIView。我将表格视图固定在视图的角落。在我的单元格中,我有 1 个 UILabel,行数设置为 0,换行符设置为自动换行。我将 UILabel 固定在单元格内内容视图的 4 个角上。还将首选宽度设置为 300。

当我注销高度和宽度时,我得到 0。

我得到的图片:

这是我计算标签高度的代码:

   -(CGFloat)tableView:(UITableView *)aTableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

        return [self heightForCommentCellAtIndexPath:indexPath];   
    

    -(ECDCommentCell *)commentCellForRowAtIndexPath:(NSIndexPath *)indexPath

         ECDCommentCell *cell = (ECDCommentCell *)[self.tableView dequeueReusableCellWithIdentifier:commentCellIdentifier];

        [cell.layer setBorderWidth:1.0f];
        [cell.layer setBorderColor:[[UIColor blueColor] CGColor]];

        [cell.contentLabel.layer setBorderWidth:1.0f];
        [cell.contentLabel.layer setBorderColor:[[UIColor greenColor] CGColor]];

        [self configureCommentCell:cell atIndexPath:indexPath];

        return cell;
    

    - (void)configureCommentCell:(ECDCommentCell *)cell atIndexPath:(NSIndexPath *)indexPath 

        PFObject *commentObject = [self.commentResults objectAtIndex:indexPath.row];

        //=============== Configure Comment Text
        NSString *commentText = [commentObject objectForKey:@"content"];
        [cell.contentLabel setText:commentText];
    




    - (CGFloat)heightForCommentCellAtIndexPath:(NSIndexPath *)indexPath 
        static ECDCommentCell *sizingCell = nil;
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^
            sizingCell = [self.tableView dequeueReusableCellWithIdentifier:commentCellIdentifier];
        );

        [self configureCommentCell:sizingCell atIndexPath:indexPath];
        return [self calculateHeightForConfiguredSizingCell:sizingCell];
    


    - (CGFloat)calculateHeightForConfiguredSizingCell:(UITableViewCell *)sizingCell 
        sizingCell.bounds = CGRectMake(0.0f, 0.0f, CGRectGetWidth(self.tableView.frame), CGRectGetHeight(sizingCell.bounds));
        [sizingCell setNeedsLayout];
        [sizingCell layoutIfNeeded];

        CGSize size = [sizingCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
        return size.height + 1.0f; // Add 1.0f for the cell separator height
    

如果我添加一个固定高度,比如说 60,我会得到:

【问题讨论】:

抱歉我看不懂图片。当我最近面对这个问题时,也许我可以帮助你。但是,重要的是我要了解正在发生的事情。 在图片中,它们是返回的 3 行。表格视图有红色边框,单元格有蓝色边框,UIlabel 有绿色边框。我得到的返回高度对于高度和宽度都是零。 我添加了一张图片,显示我强制高度与使用自动布局计算它 @MatteoGobbi 我添加了一张图片,显示我强制高度与使用自动布局计算它 【参考方案1】:

我犯了一个简单的错误。忘记合成我的标签了。

【讨论】:

以上是关于自动布局和 UILabel 的问题的主要内容,如果未能解决你的问题,请参考以下文章

UILabel 有时不能正确换行(自动布局)

具有富文本 HTML 功能和自动布局支持的 UILabel

UILabel 宽度和自动布局的困难

如何在通知内容扩展中使用多行 UILabel / 自动布局调试布局

UILabel 自动布局适合

Swift - 根据其内容自动布局 UILabel 高度