2012-12-02 116 views
0

我已经设置了一个标签,标签中有一些文字。现在我想设置所有文本适合标签的字体。我用于最小字体大小,因为标签文本每天都在变化。但突然它不会工作。我做错了什么?最小字体大小问题

这里我的代码:

CGRect infoLabelRect = CGRectMake(10, 250, 260, 350); 


UILabel *infoLabel = [[UILabel alloc] initWithFrame:infoLabelRect]; 
infoLabel.text = @"bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla"; 
infoLabel.numberOfLines = 9; 
infoLabel.font = [UIFont systemFontOfSize:17]; 
infoLabel.minimumFontSize = 12; 
infoLabel.adjustsFontSizeToFitWidth = YES; 
infoLabel.textColor = [UIColor whiteColor]; 
infoLabel.textAlignment = NSTextAlignmentCenter; 
infoLabel.backgroundColor = [UIColor clearColor]; 
infoLabel.shadowColor = [UIColor blackColor]; 
infoLabel.shadowOffset = CGSizeMake(0, 1); 
[infoLabel sizeToFit]; 

我试了一下rmaddy伤心,但没有显示的文本。

这是我的代码不起作用。 有什么建议吗?

UILabel *infoLabel = [[UILabel alloc] initWithFrame:infoLabelRect]; 
    NSString *text = @"bla bla bla"; 
    UIFont *font = nil; 
    CGFloat points = 17; 
    CGFloat maxHeight = infoLabel.frame.size.height; 
    CGFloat textHeight; 
    do { 
     font = [UIFont systemFontOfSize:points]; 
     CGSize size = CGSizeMake(infoLabelRect.size.width, 100000); 
     CGSize textSize = [text sizeWithFont:font constrainedToSize:size lineBreakMode: NSLineBreakByWordWrapping]; 
     textHeight = textSize.height; 
     points -= 1; 
    } while (textHeight > maxHeight); 

    infoLabel.font = font; 
    infoLabel.textColor = [UIColor whiteColor]; 
    infoLabel.textAlignment = NSTextAlignmentCenter; 
    infoLabel.backgroundColor = [UIColor clearColor]; 
    infoLabel.shadowColor = [UIColor blackColor]; 
    infoLabel.shadowOffset = CGSizeMake(0, 1); 
    [infoLabel sizeToFit]; 
    [contentView addSubview:infoLabel]; 
+1

什么是“无法工作”是什么意思?它总是fontSize 17?或者它是截断文本? –

+0

它总是字体大小17 – MasterRazer

回答

2

minimumFontSize的使用仅适用于一行的标签。多行或换行标签不会尝试调整字体大小。

从文档的minimumFontSize

此属性的默认值是0.0。如果您为标签启用字体调整,则应该始终增加此值。只有当numberOfLines属性设置为1。

一种解决方案是利用NSString sizeWithFont:constrainedToSize:lineBreakMode:法计算的字体大小需要使标签的文本适合所分配的空间这个属性是有效的。

编辑:喜欢的东西应该工作(这不是测试,可能是错别字):

NSString *text = @"hello"; 
UIFont *font = nil; 
CGFloat points = 17; 
CGFloat maxHeight = infoLabel.frame.size.height; 
CGFloat textHeight; 
do { 
    font = [UIFont systemFontOfSize:points]; 
    CGSize size = CGSizeMake(infoLabelRect.size.width, 100000); 
    CGSize textSize = [text sizeWithFont:font constrainedToSize:size lineBreakMode: NSLineBreakByWordWrapping]; 
    textHeight = textSize.height; 
    points -= 1; 
} while (textHeight > maxHeight); 

infoLabel.font = font; 
+0

你有我的例子吗? – MasterRazer

+0

如果你能以示例向我展示 – MasterRazer

+2

@NoahRaissi,我会很高兴有一点耐心。我正忙着输入代码。 – rmaddy