【问题标题】:NSLineBreakByTruncatingTail not show three dots when the truncated line is end up with \n当截断的行以 \n 结尾时,NSLineBreakByTruncatingTail 不显示三个点
【发布时间】:2017-10-26 08:46:19
【问题描述】:
UILabel *label
label.numberOfLines = 1;
label.text = @"abc\nabc";
label.lineBreakMode = NSLineBreakByTruncatingTail;

显示为:abc 预期:abc... 我尝试在段落属性中设置属性文本并设置换行模式,也没有工作-_-//

添加: 如果将 '\n' 字符替换为超过一行的文本,则它也会显示。如:设置标签宽度100pt,设置文字'abcabcabcabcabcbacb'和blabla多行,显示为'abcabcabcabca...'。

所以如果可以截断的文本与键字符'\n'有关。

【问题讨论】:

    标签: ios uilabel


    【解决方案1】:
        let label = UILabel()
        label.frame = CGRect(x: 100, y: 200, width: 50, height: 25)
        label.backgroundColor = UIColor.red
        label.numberOfLines = 0;
        label.lineBreakMode = NSLineBreakMode.byTruncatingTail
        label.text = "abc\nabc"
    

    将行数设为 0,高度在 1 行范围内(比如 21),然后您将得到预期的答案。 如果你给的行数是 1,第一行没有什么可以截断的。它只是忽略第二行文本。

    【讨论】:

    • 操作!我发现如果我删除'\n'并附加两行单词,那么它将被'...'截断。所以它与 '\n' 字符有关。现在没有解决-_-///。
    • 当我们将高度设置为 25. 和宽度设置为 50 时,并且不会根据文本大小调整标签框架的大小。它会截断尾巴。你的实际需求是什么?
    • 要求是通过设置numberOfLines而不是可见文本高度来截断文本。如果不以'\n'结束最后一个可见行,它会很好地工作。
    • 请查看更新后的答案。希望对您有所帮助
    【解决方案2】:

    创建一个高度为 21 的标签(或根据您的意愿)。并设置前导、尾随、顶部和高度约束。将高度约束 >= 设置为高度。将高度约束连接到类。

     label.numberOfLines = 5;    //set number of lines as you need.
     label.lineBreakMode = NSLineBreakMode.byTruncatingTail  // set as truncate tail to get …
     let strings = "iOS is a mobile operating system created and developed by Apple Inc. exclusively for its hardware. It is the operating system that presently powers many of the company's mobile devices, including the iPhone, iPad, and iPod Touch"
     label.text = strings
     let size: CGSize = label.text!.size(withAttributes [NSAttributedStringKey.font: UIFont.systemFont(ofSize: 14.0)])
     labelHeightConstraint.constant = size.height
    

    【讨论】:

    • 感谢您的回答,但我无法使用 AutoLayout,在应用程序中使用另一个布局引擎并通过 JavaScript 编码。现在我把这个问题当作iOS中的一个bug,有没有办法解决它?
    【解决方案3】:

    试试这个。

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20, 50, 200, 25)];
    label.lineBreakMode = NSLineBreakByWordWrapping;
    label.numberOfLines = 0; //  use 0 for unlimited.
    label.preferredMaxLayoutWidth = self.view.frame.size.width;
    label.text = @" abc \n abc \n abc \n abc \n abc \n abc \n abc \n abc \n abc \n";
    [label sizeToFit];
    [label setNeedsDisplay];
    [self.view addSubview:label];
    

    请也检查讨论。 Adjust UILabel height depending on the text

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-02
      • 2020-11-17
      • 1970-01-01
      • 2015-05-19
      • 2015-10-29
      • 2017-08-04
      • 1970-01-01
      相关资源
      最近更新 更多