如何删除" ..."在UILabel结束时调整文本大小以适应?

时间:2015-09-13 07:56:54

标签: ios objective-c uilabel

我希望自动调整文本并将其全部显示在一行上。我的问题是我不想要" ..."附在我的文字末尾。我怎么能摆脱这个?我的第一张图片是显示" ..."我想摆脱。第二张图显示了当我将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 ...... Image 1

图片2 ...... Image 2

4 个答案:

答案 0 :(得分:2)

设置[UILabel lineBreakMode]

Reference

  

<强>常量

     

NSLineBreakByWordWrapping

     

包装发生在单词上   边界,除非单词本身不适合单行。看到   字符串编程指南中的字符和字形集群   讨论与确定单词边界相关的问题。

     

适用于iOS 6.0及更高版本。

     

NSLineBreakByCharWrapping

     

包装   发生在第一个不适合的角色之前。

     

适用于iOS 6.0及更高版本。

     

NSLineBreakByClipping

     

线条很简单   没有经过文本容器的边缘。

     

适用于iOS 6.0及更高版本。

     

NSLineBreakByTruncatingHead

     

这条线   显示以使末端适合容器和缺失   该行开头的文本由省略号字形表示。   虽然此模式适用于多行文本,但它更常用于   单行文字。

     

适用于iOS 6.0及更高版本。

     

NSLineBreakByTruncatingTail

     

这条线   显示,以便开头适合容器和   行尾的缺少文本由省略号字形表示。   虽然此模式适用于多行文本,但它更常用于   单行文字。

     

适用于iOS 6.0及更高版本。

     

NSLineBreakByTruncatingMiddle

     

这条线   显示,以便开头和结尾适合容器和   中间缺少的文本由省略号字形表示。   虽然此模式适用于多行文本,但它更常用于   单行文字。

     

适用于iOS 6.0及更高版本。

答案 1 :(得分:0)

如果您希望文本自动调整大小以适应宽度,为什么设置cityLabel.adjustsFontSizeToFitWidth = NO;我认为它应该设置为YES。

然后设置cityLabel.lineBreakMode = NSLineBreakByTruncatingTail

答案 2 :(得分:0)

尝试流动。

 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];

答案 3 :(得分:0)

这里有一些有趣的选项,但这可以在Interface Builder内完成,只需一个设置:

enter image description here

  1. 选择标签
  2. 在“属性检查器”下,选择“自动收缩”选项下的“最小字体比例”。
  3. 选择合适的比例。
  4. 此外,如果您有正确的AutoLayout约束,这应该是动态的。