使用自动布局时删除UILabel填充/边距

Eri*_*ric 5 objective-c interface-builder uitableview ios autolayout

我有一个使用自动布局的UITableView.我有多个类型的细胞,但现在让我们用最简单的是,一个只有一个UILabel.

在tableView:heightForRowAtIndexPath:我有以下代码:

    [self configureCell:self.detailsCell forRowAtIndexPath:indexPath];
    [self.detailsCell layoutIfNeeded];

    CGSize size = [self.detailsCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
    return size.height + 1;
Run Code Online (Sandbox Code Playgroud)

反过来打电话

- (void)configureCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    // ...
    cell.detailsLabel.text = self.data.myText;
    cell.detailsLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];
    // [cell.detailsLabel sizeToFit]; <- I tried this, but didn't help
}
Run Code Online (Sandbox Code Playgroud)

界面生成器截图

我最终得到了这个:

实际细胞

绿色矩形是实际的单元格.紫色矩形是UILabel.我不想要顶部和底部的紫色填充/边距.我怎么能摆脱它?

Flo*_*ori 5

你必须要小心" 限制利润: "

比较这两个图像: 约束边距= YES 和 限制结婚=否

所以在添加新约束的同时取消选择"consur to margin",应该解决你的填充/边距问题:-)

如果您愿意,可以使用"编辑器/画布/显示布局矩形"来显示这些边距.没有布局矩形的视图: 显示布局矩形= NO 和布局矩形设置显示(这说明您的问题非常好) 显示布局矩形= YES


sco*_*phc 0

您可以向 UILabel 添加水平居中。然后将“顶部空间到超级视图”的关系设置为“大于或等于”,并以同样的方式设置底部空间。构建并运行,可以看到UILabel的动态高度是根据UILabel的内容变化的。