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

时间:2014-10-09 23:27:16

标签: ios objective-c uitableview interface-builder 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;

反过来调用

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

Interface builder screenshot

我最终得到了这个:

Actual cell

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

3 个答案:

答案 0 :(得分:5)

你必须小心&#34; 限制边距:&#34;

比较这两张图片: Constrain to margins = YESConstrain to marings = NO

如此无视&#34; constrian到边缘&#34;在添加新约束时,应解决填充/边距问题: - )

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

答案 1 :(得分:0)

您可以将水平中心添加到UILabel。然后设置&#34;大于或等于&#34;关于&#34;顶层空间与superview&#34;的关系,并以相同的方式设置底部空间。构建并运行,您可以看到UILabel的动态高度符合UILabel的内容。

答案 2 :(得分:-1)

边距是由您设置的自动布局限制造成的。在尺寸检查器中将所有边距设置为零。

如果你正在使用Xcode 6&amp;支持iOS 8,约束可能设置为'容器边距'而不是'容器'本身。它略有不同,将容器边距设置为零将对您有用。当您在故事板中设置约束时,可以通过按“Alt。”来切换它们。