使用自动布局时删除 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 填充/边距的主要内容,如果未能解决你的问题,请参考以下文章