簡體   English   中英

調整文本大小以適合大小時,如何刪除UILabel末尾的“…”?

[英]How do I remove the “…” at end of UILabel when resizing text to fit?

我正在尋找自動調整文本大小並將其全部顯示在一行上的功能。 我的問題是我不希望在文本末尾添加“ ...”。 我該如何擺脫呢? 我的第一個圖像是顯示要刪除的“ ...”的位置。 第二張圖顯示了將cityLabel上的numberOfLines從0更改為1時發生的情況。我也不希望這樣,因為我不需要多行(僅一行就行)。

這是代碼:

UIView *view = [[UIView alloc] initWithFrame: CGRectMake (20, 0, self.view.frame.size.width-20, 90)];
UILabel *cityLabel = [[UILabel alloc] initWithFrame: CGRectMake (10, 5, self.view.frame.size.width-20, 55)];
UILabel *supportedCitiesLabel = [[UILabel alloc] initWithFrame: CGRectMake (10, 65, self.view.frame.size.width-20, 20)];

cityLabel.font = [UIFont boldSystemFontOfSize:50.0];
cityLabel.text = @"Dallas Dallas Dallas Dallas Dallas Dallas";
supportedCitiesLabel.text = @"Valley Test";


CGRect labelRect = cityLabel.frame;
cityLabel.adjustsFontSizeToFitWidth = NO;
cityLabel.numberOfLines = 1;


CGFloat fontSize = 50;
while(fontSize > 0.0)
{
    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc]init];
    paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping;
    NSDictionary *attrDict = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont boldSystemFontOfSize:fontSize], NSFontAttributeName, paragraphStyle, NSParagraphStyleAttributeName, nil];

    CGSize size = [cityLabel.text boundingRectWithSize:CGSizeMake(labelRect.size.width, 10000)
                                                                options:NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesLineFragmentOrigin
                                                             attributes:attrDict context:nil].size;

    if(size.height <= labelRect.size.height)
        break;

    fontSize -= 1.0;
}

cityLabel.font = [UIFont boldSystemFontOfSize:fontSize];

圖片1 ... 圖片1

圖片2 ... 圖片2

設置[UILabel lineBreakMode]

參考

常數

NSLineBreakByWordWrapping

包裝發生在單詞邊界,除非單詞本身不適合一行。 有關與確定單詞邊界有關的問題的討論,請參見《字符串編程指南》中的字符和字素簇。

在iOS 6.0及更高版本中可用。

NSLineBreakByCharWrapping

包裝發生在第一個不合適的字符之前。

在iOS 6.0及更高版本中可用。

NSLineBreakByClipping

線條根本不會越過文本容器的邊緣。

在iOS 6.0及更高版本中可用。

NSLineBreakByTruncatingHead

將顯示該行,以使其末端適合容器,並且在行首缺少的文本由省略號字形指示。 盡管此模式適用於多行文本,但更常用於單行文本。

在iOS 6.0及更高版本中可用。

NSLineBreakByTruncatingTail

將顯示該行,以便使開頭適合於容器,並且在行尾缺少的文本由省略號字形指示。 盡管此模式適用於多行文本,但更常用於單行文本。

在iOS 6.0及更高版本中可用。

NSLineBreakByTruncatingMiddle

將顯示該行,以使開始和結束位置適合容器,而中間的缺失文本用省略號字形指示。 盡管此模式適用於多行文本,但更常用於單行文本。

在iOS 6.0及更高版本中可用。

如果要使文本自動調整大小以適合寬度,為什么要設置cityLabel.adjustsFontSizeToFitWidth = NO; 我認為應該將其設置為“是”。

然后設置cityLabel.lineBreakMode = NSLineBreakByTruncatingTail

順其自然地嘗試一下。

 UIView *view = [[UIView alloc] initWithFrame: CGRectMake (0, 150, self.view.frame.size.width-20, 90)];
UILabel *cityLabel = [[UILabel alloc] initWithFrame: CGRectMake (10, 5, self.view.frame.size.width-20, 55)];
UILabel *supportedCitiesLabel = [[UILabel alloc] initWithFrame: CGRectMake (10, 65, self.view.frame.size.width-20, 20)];

cityLabel.font = [UIFont boldSystemFontOfSize:50.0];
cityLabel.text = @"Dallas Dallas Dallas Dallas Dallas Dallas";
supportedCitiesLabel.text = @"Valley Test";


CGRect labelRect = cityLabel.frame;
cityLabel.adjustsFontSizeToFitWidth = NO;
cityLabel.lineBreakMode = NSLineBreakByClipping;
cityLabel.numberOfLines = 1;


CGFloat fontSize = 50;
while(fontSize > 0.0)
{
    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc]init];
    paragraphStyle.lineBreakMode = NSLineBreakByClipping;
    NSDictionary *attrDict = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont boldSystemFontOfSize:fontSize], NSFontAttributeName, paragraphStyle, NSParagraphStyleAttributeName, nil];

    CGSize size = [cityLabel.text boundingRectWithSize:CGSizeMake(labelRect.size.width, 10000)
                                               options:NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesLineFragmentOrigin
                                            attributes:attrDict context:nil].size;

    if(size.height <= labelRect.size.height)
        break;

    fontSize -= 1.0;
}

cityLabel.font = [UIFont boldSystemFontOfSize:fontSize];


// [self.view addSubview:view];
// [view addSubview:cityLabel];
// [view addSubview:supportedCitiesLabel];

這里有一些有趣的選項,但是都可以通過一種設置在Interface Builder內部完成:

在此處輸入圖片說明

  1. 選擇標簽
  2. 在“屬性”檢查器下,選擇“自動收縮”選項下的“最小字體比例”。
  3. 選擇合適的比例。

另外,如果您具有正確的自動版式約束,則它應該可以動態工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM