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

Posted

技术标签:

【中文标题】使用自动布局时删除 UILabel 填充/边距【英文标题】:Remove UILabel padding/margin while using auto layout 【发布时间】:2014-10-09 23:27:15 【问题描述】:

我有一个使用自动布局的 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。我不想要顶部和底部 紫色 填充/边距。我怎样才能摆脱它?

【问题讨论】:

看起来您在情节提要中设置了这些边距的常量。所以它的行为与它应该的完全一样。 那些边距是绿色的。他不希望标签本身内有填充。 【参考方案1】:

你必须小心“限制到边距:

比较这两张图片: 和

所以在添加新约束时取消选择“constrian to margins”,应该可以解决您的填充/边距问题:-)

如果您愿意,可以使用“Editor/Canvas/Show Layout Rectangles”可视化这些边距 没有布局矩形的视图: 并将布局矩形设置为显示(这很好地说明了您的问题)

【讨论】:

很遗憾我已经尝试过了。我所看到的是填充不是确定性的。有时它比其他的高......虽然看起来如果有更多的文字,填充变大。 Mh...也许您的约束条件未确定布局(不知道为什么,但也许)。要检查这一点,只需在调试器中暂停时键入po [[UIWindow keyWindow] _autolayoutTrace]。或者另一方面,也许尝试设置标签的preferredMaxLayoutWidth。这很重要,因为它是标签停止水平增长并开始垂直增长的宽度。 @埃里克【参考方案2】:

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

【讨论】:

【参考方案3】:

边距是由于您设置的自动布局约束。在尺寸检查器中将所有边距设置为零。

如果您使用 Xcode 6 并支持 ios 8,则约束可能设置为“容器边距”而不是“容器”本身。它略有不同,将容器的边距设置为零将对您有用。当您在情节提要中设置约束时,可以通过按“Alt”在它们之间切换。

【讨论】:

那些边距在标签之外,问题是关于标签内的填充。

以上是关于使用自动布局时删除 UILabel 填充/边距的主要内容,如果未能解决你的问题,请参考以下文章

UITableview 单元格内的 UILabel,自动布局填充问题

iOS:自动布局灵活边距

iPad 的自动布局问题

按钮之间的自动布局边距仅在 4" 屏幕上不正确

使用自动布局正确对齐通知中心小部件中的元素

自动布局 - 如何分配内容以按比例填充屏幕[重复]