UILabel文字包装问题

时间:2016-03-31 08:04:46

标签: ios objective-c swift uilabel

我有一条多行UILabel,文字为#34; 我想在印度洋乘船"。在iPhone 5中,UILabel显示文字" 海洋"在第二行,因为宽度大小。

我想要的是如果UILabel中的文字出现在两行中,那么文字" 印度洋"应显示在第二行或在有足够宽度的情况下,所有文本应出现在一行中。

任何想法如何实现这一点。

5 个答案:

答案 0 :(得分:1)

它是一个解决方案。但这符合您的要求,无需确定运行应用程序的设备。通常UILabel会将whitespaces周围的单词换行。所以你可能应该indian ocean一个单词,但它应该显示为两个单独的单词。

let string = "<font size = 5 face = Avenir Next>I would like to ride a boat in<font color = white>_</font>indian ocean</font>"
let attributedString = try? NSAttributedString(data: string.dataUsingEncoding(NSUTF8StringEncoding)!, options:[NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: NSUTF8StringEncoding], documentAttributes: nil)
label.attributedText = attributedString

您可以指定所需的字体大小,系列,并将_的颜色设置为backgroundColor的{​​{1}}。

答案 1 :(得分:1)

  1. 你应该计算iPhone的宽度。
  2. 计算标签中的文字宽度。
  3. 如果文字宽度&gt; iPhone宽度然后在新的行中设置“印度洋”
  4. 请检查以下代码:

    let screenRect = UIScreen.mainScreen().bounds;
    let screenWidth = screenRect.size.width;
    
    let text:String = self.label.text!
    let attr:NSDictionary = [NSFontAttributeName: self.label.font];
    let textSize = (text as NSString).sizeWithAttributes(attr as? [String : AnyObject])
    let textWidth = textSize.width
    
    if textWidth > screenWidth{
        self.label.text = "I would like to ride a boat in\nindian ocean"
    }
    

答案 2 :(得分:1)

无需使用设备检测...使用一个技巧就可以解决这个问题“如果标签显示两行文字,那么文字”印度洋“将显示第二行或者它将显示在第一行。”

要遵循的步骤:

  1. 在属性检查器中将UILabel的文本类型从plain更改为属性。
  2. 在“印度洋”之间放置任何字符,例如“indian_ocean”。
  3. 选择该字符(在我的情况下,我使用了下划线“_”)并更改文字颜色并将不透明度设置为0%(无需更改颜色,只有不透明度足以使透明变为透明,以便用户无法看到字符)
  4. 就是这样。

    或者关注gif图片。 enter image description here

答案 3 :(得分:0)

label.numberOfLines = 0;
label.text = @"I would like to ride a boat in indian ocean"; 
[label sizeToFit];

答案 4 :(得分:0)

这是一个UILabel扩展,用于在同一行显示连续的文本组件。 enter image description here
只需添加文件和以下代码行

即可

label.addConsectiveComponents(["indian ocean"])

它会在一行中显示“印度洋”,即如果当前行中有空格,则会在下一行显示其他位置。