2014-03-24 34 views
1

例如,如果UILabel的文本是:"Questions that may already have your answer",我希望它打印 "Questions that may alr"。我不想剪掉最後一個字符,但是在那個時候剪掉了文本。如何在iOS上使用帶setNumberOfLines:1的NSLineBreakByCharWrapping?

我不能使用字符限制,因爲大多數字體不是等寬字體。我不能使用剪裁,因爲它可能會在另一個點上剪切文本,或者可能會從最後的任何位置剪下最後一個字母「r」。

我想要的行爲類似於NSLineBreakByCharWrappingnumberOfLines = 0。因此,我希望它放棄(包裝)那個不合適的最後一個字符,但我希望它放下/包裝到一個隱藏的空間=我不想要那第二行。

這怎麼可能?

回答

1

,以便根據需要,你需要知道的標籤,可以通過下面的方法被稱爲寬度輸出:

CGSize size = [string sizeWithAttributes: 
         @{NSFontAttributeName: 
         [UIFont systemFontOfSize:17.0f]}]; // iOS 7 and later 

CGSize size = [string sizeWithFont: [UIFont systemFontOfSize:17.0f]]; // prior to iOS 7 
  • 設置標籤的大小與上述計算的大小。
  • 將numberOfLines屬性設置爲1;
  • 將lineBreakMode屬性設置爲NSLineBreakByCharWrapping;

    UILabel *yourLbl = [[UILabel alloc] initWithFrame:CGRectMake(50, 50, size.width, 50)]; 
    placeLbl.numberOfLines = 1; 
    placeLbl.lineBreakMode = NSLineBreakByCharWrapping; 
    
+0

問題是,文本不是固定的文本,所以我不能只計算大小。我們需要像「確定可以放入目標空間的最大字符數量,然後我們可以相應地得到子字符串,所以除了試圖找到足夠的字符數量以外,我不知道該怎麼嘗試(例如'for(int i = 0; i <...; i ++){maxIndex = i; if(size.width of(substring of string to i)> target width){break;}} '但這看起來效率不高) – frankish

1

在迅速3.0 labelObject.numberOfLines = 0; labelObject.lineBreakMode = NSLineBreakMode.byCharWrapping

相關問題