2012-12-10 595 views
4

我在IB中将numberOfLines设置为1,但是当我将文本设置为长字符串时,它不会截断。如果我将numberOfLines设置为2,则截断运行正常。应该如何将一个长字符串截断为单行?UILabel截断文本不起作用

+1

什么,而不是发生了什么? – borrrden

+0

@borrrden,在我的情况下,它只是剪辑的标签容器的边框文字,而没有显示小圆点 – igrek

+1

终于解决了..这个问题是一个属性串...我有我的文字与它规定的问题,它使用自定义pagargaph样式。当我指定了段落的lineBreakMode时,问题就解决了。学分去https://stackoverflow.com/a/41945661/907692 – igrek

回答

-5

也许这种方法可以帮助你:

[myLabel sizeToFit]

该标签不会被截断,但会调整标签大小以适合一行。

6

简单,设置以下属性:

label.adjustsFontSizeToFitWidth = NO; 
label.lineBreakMode = NSLineBreakByTruncatingTail; 
1

如果设置在IB标签的自动收缩到“固定字体大小”,你总是会得到一个truncatation当字符串宽度超过标签宽度。我猜你碰巧把它设置为“最小字体比例”或“最小字体字体”,这会在字符串太长时导致调整大小。

enter image description here

(Xcode的4.5,Xcode和IB的其他版本可能是不同的属性名)

+0

它仍然无法正常截断文本(使用字符换行/换行)。它只是切断了文字的图形。除非使用多行,否则会将第一行的位置更改为无法看到的位置。 – CommaToast

0

我做两个功能,这将帮助你做你的工作。

基础: 该解决方案为我做任务:
“最小化字体的字体我最小大小,然后把尽可能多的信息,如可能的,但不是更大然后最大宽度”

takeFineFont ...功能参数:
(UIFont*)font - 你的标签(titleLabel.font)的字体
(NSString*)string - 文本在标签(titleLabel.text
(CGSize)limitStringSize - 极限尺寸。
limitStringSize.width - 你的标签宽度的限制(上限)
limitStringSize.height - 你的标签(下限)高度限制(实际上,字体的大小)

-(UIFont*)takeFineFontSize:(UIFont*)font 
       forText:(NSString*)string 
      andLimit:(CGSize)limitStringSize{ 
    UIFont* resultFont = [UIFont fontWithName:[font fontName] size:[font pointSize]]; 
    if(limitStringSize.width != 0 && limitStringSize.height != 0){ 
     CGSize currentSize = [string sizeWithFont:resultFont]; 

     while(/* change font width with upper bound */ 
       currentSize.width > limitStringSize.width 
       && 
       /* change font height with lower bound */ 
       currentSize.height > limitStringSize.height){ 

      /*change height and take new width*/ 
      currentSize.height -= 1; 
      currentSize.width = [string sizeWithFont:[resultFont fontWithSize:currentSize.height]].width; 
     } 
     resultFont = [resultFont fontWithSize:currentSize.height]; 
    } 
    return resultFont; 
} 
-(double)takeFineWidthForFont:(UIFont*)font 
        forString:(NSString*)string 
        andLimit:(double)widthLimit{ 
    return MIN([string sizeWithFont:font].width, widthLimit); 
} 

假设,你已经在UILabel* titleLabel
大串 你定义的地方:

#define maximumLengthOfYourLabel 300 
#define minimumSizeOfFont 14 

你现在做什么呢?只是这样做和平的代码:

-(void)updateTitleLabelWithBigText:(NSString*)string{ 

    /*change text*/ 
    self.titleLabel.text = string; 

    /*take pretty small font*/ 
    self.titleLabel.font = [self takeFineFontSize:self.titleLabel.font 
              forText:self.titleLabel.text 
             andLimit:CGSizeMake(maximumLengthOfYourLabel,minimumSizeOfFont) 
              ]; 

    /*if your text still big, take minimal width and trunctate it*/ 
    self.titleLabel.width = [self takeFineWidthForFont:self.titleLabel.font 
              forString:self.titleLabel.text 
               andLimit:maximumLengthOfYourLabel]; 
    self.titleLabel.lineBreakMode = NSLineBreakByTruncatingTail; 
} 
3

你可能有在该节即拍的东西就会失控的标签上的约束。

仔细检查您的约束条件,或者删除它们以找到该部分中的该标签或其他控件。

标签的故事板选项:“换行符:截尾”将用于您正在查找的工作。

+0

这绝对是我的问题。就我而言,我只是删除了所有约束条件,并重新添加了我想要的。 – livingtech

4

如果使用自动布局,在我的情况下,缺少一个约束。如果UILabel的宽度/尾部没有设置约束,则它会增加其宽度。一旦它的宽度受到限制,例如其超视图,就会发生截断。

+0

谢谢,振动。该解决方案为我工作。我将label.trailing设置为等于superview.trailing和NumberOFLines为1.标签被截断! –