在使用自动布局时去除UILabel的内边距/外边距

5

我有一个使用自动布局的UITableView。我有多种类型的单元格,但现在让我们使用最简单的一种,只有一个UILabel。

tableView:heightForRowAtIndexPath:中,我有以下代码:

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

    CGSize size = [self.detailsCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
    return size.height + 1;

这进而调用

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

界面构建器截图

最终效果如下:

实际单元格

绿色矩形是实际单元格。 紫色矩形是UILabel。 我不想要顶部和底部紫色填充/边距。 如何消除它?


看起来你在Storyboard中设置了这些边距的常量。所以它的行为正是应该的。 - sha
1
那些边距是绿色的。他不想要标签本身内部的填充。 - Paludis
3个回答

5

您需要注意"限制到边距:"

比较以下两张图片: 设置未设置

所以在添加新的约束时,取消选择"限制到边距"应该可以解决您的内填充/外边距问题 :-)

如果您愿意,您可以使用"编辑器/画布/显示布局矩形"来可视化这些边距。 没有布局矩形的视图: 不显示布局矩形 设置了布局矩形后(这很好地说明了您的问题) 显示布局矩形


很遗憾,我已经尝试过这个了。我看到的是填充不是确定性的。有时它比其他时间高...虽然看起来如果有更多的文本,填充会变得更大。 - Eric
嗯...也许你的约束条件不足以决定布局(不确定原因,但可能如此)。要检查这一点,只需在调试器中暂停时输入 po [[UIWindow keyWindow] _autolayoutTrace]。或者换句话说,尝试设置标签的 preferredMaxLayoutWidth。这很重要,因为这是标签在水平方向上停止增长并开始垂直增长的宽度。@Eric - Flori

0
你可以给UILabel添加水平居中。然后将“上边距相对于父视图”的关系设置为“大于或等于”,并以同样的方式设置底部间距。构建和运行,你会发现UILabel的动态高度是根据UILabel的内容而定的。

-1

边距是由于您设置的自动布局约束而产生的。在大小检查器中将所有边距设置为零。

如果您使用的是Xcode 6并支持iOS 8,则约束可能设置为“容器边距”而不是“容器”本身。这有点不同,将容器的边距设置为零将适用于您。您可以通过按“Alt”键在故事板中设置约束时在它们之间切换。


1
那些边距在标签外面,问题是关于标签内部的填充。 - Paludis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接