小编典典

向 UILabel 添加空间/填充

all

我有一个UILabel我想在顶部和底部添加空间的地方。使用约束中的最小高度,我将其修改为:

在此处输入图像描述

为此,我使用了:

override func drawTextInRect(rect: CGRect) {
    var insets: UIEdgeInsets = UIEdgeInsets(top: 0.0, left: 10.0, bottom: 0.0, right: 10.0)
    super.drawTextInRect(UIEdgeInsetsInsetRect(rect, insets))
}

但是我必须找到一种不同的方法,因为如果我写了两行以上,问题是一样的:

在此处输入图像描述


阅读 91

收藏
2022-05-31

共1个答案

小编典典

如果您想坚持使用 UILabel,而不是对其进行子类化,已经为您提供了明确的解决方案。

您可以从 IB 正确执行此操作:

  1. 将文本更改为属性

属性文本

  1. 使用“…”进入下拉列表

在此处输入图像描述

  1. 您将看到行、段落和文本更改缩进第一行或任何您想要的任何内容的一些填充属性

在此处输入图像描述

  1. 检查结果

在此处输入图像描述

如果您愿意避免使用 UIView 包装 UILabel,则可以使用 UITextView 来启用 UIEdgeInsets(填充)或子类 UILabel
以支持 UIEdgeInsets。

使用 UITextView 只需要提供插图(Objective-C):

textView.textContainerInset = UIEdgeInsetsMake(10, 0, 10, 0);

或者,如果您将 UILabel 子类化,则此方法的示例将覆盖 drawTextInRect 方法
(Objective-C)

- (void)drawTextInRect:(CGRect)uiLabelRect {
    UIEdgeInsets myLabelInsets = {10, 0, 10, 0};
    [super drawTextInRect:UIEdgeInsetsInsetRect(uiLabelRect, myLabelInsets)];
}

您还可以为新的子类 UILabel 提供 TOP、LEFT、BOTTOM 和 RIGHT 的插入变量。

示例代码可以是:

在 .h (Objective-C)

float topInset, leftInset,bottomInset, rightInset;

在.m(目标-C)

- (void)drawTextInRect:(CGRect)uiLabelRect {
    [super drawTextInRect:UIEdgeInsetsInsetRect(uiLabelRect, UIEdgeInsetsMake(topInset,leftInset,bottomInset,rightInset))];
}

从我所见,您似乎必须在子类化 UILabel 时覆盖它的 intrinsicContentSize 。

所以你应该像这样覆盖 intrinsicContentSize

- (CGSize) intrinsicContentSize {
    CGSize intrinsicSuperViewContentSize = [super intrinsicContentSize] ;
    intrinsicSuperViewContentSize.height += topInset + bottomInset ;
    intrinsicSuperViewContentSize.width += leftInset + rightInset ;
    return intrinsicSuperViewContentSize ;
}

并添加以下方法来编辑您的插图,而不是单独编辑它们:

- (void) setContentEdgeInsets:(UIEdgeInsets)edgeInsets {
    topInset = edgeInsets.top;
    leftInset = edgeInsets.left;
    rightInset = edgeInsets.right;
    bottomInset = edgeInsets.bottom;
    [self invalidateIntrinsicContentSize] ;
}

它将更新您的 UILabel 的大小以匹配边缘插图并涵盖您提到的多行必要性。

经过一番搜索后,我发现了这个带有 IPInsetLabel 的Gist
如果这些解决方案都不起作用,您可以尝试一下。

关于这个问题有一个类似的问题(重复)。
有关可用解决方案的完整列表,请参阅此答案: UILabel text
margin

2022-05-31