【问题标题】:How to break line of a UILabel dynamically with text?如何用文本动态中断 UILabel 的行?
【发布时间】:2017-03-14 05:06:43
【问题描述】:

我有一个 UILabel,我想在这个标签中显示一些文本。我想将标签宽度最多增加到设备全屏的 70%。如果该标签的文本长度不适合这 70% 的大小,那么只要文本长度,标签就会自动转到下一行。每次标签长度超过主屏幕宽度的 70% 时,线条也会中断。我尝试了几种方法,但仍然无法解决。请帮我解决这个问题。

提前致谢;

【问题讨论】:

标签: ios uilabel ios10


【解决方案1】:

将标签拖到情节提要中,并为其添加顶部和前导约束。

现在选择标签并控制拖动到持有标签的视图(在您的 ViewController 视图中),您将看到弹出窗口,然后选择相等宽度

现在您的标签宽度等于您视图的宽度:) 这不是您希望您的标签宽度为视图的 70%。所以选择label的相等约束,进入属性检查器,将乘数改为0.7

现在您的标签宽度是视图的 70%!

但您不希望它始终为 70%。它最多可以占屏幕的 70%,所以 现在将约束关系从等于小于或等于更改。

选择标签并将行数更改为 0。

就是这样:)玩得开心:)

样品 O/P:

当文本很短时 - vs - 长:

- - -

编辑:

不使用情节提要?没问题;以编程方式编写相同的约束并将其应用于足够简单的标签。如果您需要帮助,请让我知道:)

编辑:

正如您已指定要在标签中每一行的开头留下间隙,您可以使用边缘插入来实现它

- (void)drawTextInRect:(CGRect)rect {
    UIEdgeInsets insets = {0, 5, 0, 0};
    [super drawTextInRect:UIEdgeInsetsInsetRect(rect, insets)];
}

【讨论】:

  • 谢谢。如何在每行的开头添加一个空白?是否可以将标签长度与文本长度一样长(仅适用于最后一行)?
  • 您可以使用 Content insets buddy 在每一行的开头添加间隙 :) 要使其正常工作,您必须创建标签覆盖 draw() 方法的子类创建内容插入并设置它使用标签之一 init :) 关于具有不同的长度是的,如果你准备好创建 NSTextStorage 类的子类并覆盖它的各种方法(有点复杂但可以:))
  • @samiul-islam-sami : 更新了我的代码,在标签中每一行的开头留出间隙看看 :)
  • @samiul-islam-sami :如果有帮助,请考虑接受答案
  • 它显示错误,“UIViewController”没有可见的@interface 声明选择器“drawTextInRect:”。我在 UIViewController 中的超类。
【解决方案2】:

您一定忘记增加标签的高度。 下面的代码是为了让 UILabel 有多行:

label.numberOfLines = 0; 
label.lineBreakMode = NSLineBreakByWordWrapping;

然后你必须确保 UILabel 的框架有足够的高度来显示线条。您可以通过计算给定文本(NSString)所需的高度来实现这一点:

NSString *text = @"YourText";
CGFloat your70Width; // whatever your width is
CGSize constraintSize = CGSizeMake(your70Width, MAXFLOAT);
UIFont *yourLabelFont; // whatever your font is
CGRect requiredFrame = [text boundingRectWithSize:constraintSize options:NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:yourLabelFont} context:nil];

// Keeps the old x,y coordinates and replaces only the width and height.
CGRect oldLabelFrame = label.frame;
label.frame = CGRectMake(oldLabelFrame.origin.x, oldLabelFrame.origin.y, requiredFrame.size.width, requiredFrame.size.height);

现在标签将很好地显示在多行中。

【讨论】:

  • 这对我很有效,但直到我添加了[label sizeToFit]; 谢谢。
【解决方案3】:

如果您使用情节提要,根据内容增加标签的高度。给标签四个约束(顶部、底部、前导、尾随)然后转到属性检查器并将行设为 0 并在换行符中执行 WORD WRAP.

【讨论】:

    猜你喜欢
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    • 2015-03-29
    • 2014-06-17
    相关资源
    最近更新 更多