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

Ios 使用自动布局时删除UILabel填充/边距,ios,objective-c,uitableview,interface-builder,autolayout,Ios,Objective C,Uitableview,Interface Builder,Autolayout,我有一个使用自动布局的UITableView。我有多种类型的单元格,但现在让我们使用最简单的一种,只有一个UILabel 在tableView:heightForRowAtIndexPath:中,我有以下代码: [self configureCell:self.detailsCell forRowAtIndexPath:indexPath]; [self.detailsCell layoutIfNeeded]; CGSize size = [self.detailsCe

我有一个使用自动布局的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
}
-(void)configureCell:(UITableViewCell*)RowatineXpath的单元格:(NSIndexPath*)indexPath{
// ...
cell.detailsLabel.text=self.data.myText;
cell.detailsLabel.font=[UIFont preferredFontForTextStyle:UIFontTextStyleBody];

//[cell.detailsLabel sizeToFit];您可以将水平中心添加到UILabel。然后将“大于或等于”设置为“顶部空间到superview”的关系,并以相同的方式设置底部空间。构建并运行,您可以看到UILabel的动态高度取决于UILabel的内容。

页边距是由您设置的自动布局约束引起的。在“大小检查器”中将所有页边距设置为零

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

您必须小心“约束到页边距:

比较这两个图像: 及

因此,在添加新约束时取消选择“对比到边距”,应该可以解决填充/边距问题:-)

如果愿意,可以使用“编辑器/画布/显示布局矩形”可视化这些页边距 不带布局矩形的视图: 和设置为显示的布局矩形(这很好地说明了您的问题)

看起来你在故事板中设置了带有这些边距的常量。因此,它的行为与它应该的完全一样。这些边距是绿色的。他不希望在标签本身内部填充边距。这些边距在标签外部,问题是关于标签内部填充。遗憾的是,我已经尝试过了。我看到的是,填充是绿色的不确定。有时它比其他的高…虽然看起来文本越多,填充就越大。Mh…可能是您的约束决定了布局(不确定为什么,但可能)。要检查这个,只需键入
po[[UIWindow keyWindow]\u autolayoutTrace]
当在调试器中暂停时。或者另一方面,可以尝试设置标签的
首选MaxLayoutWidth
。这很重要,因为它是标签停止水平增长并开始垂直增长的宽度。@Eric