在IOS8上根据边框大小设置UILabel字体大小?
Posted
技术标签:
【中文标题】在IOS8上根据边框大小设置UILabel字体大小?【英文标题】:Set UILabel font size according to its frame size on IOS8? 【发布时间】:2015-08-10 08:52:39 【问题描述】:我找到了很多具有“adjustsFontSizeToFitWidth
”属性的解决方案,但这些解决方案都不适用于ios8。
我开发了一个响应式应用程序,标签字体大小必须根据屏幕宽度而变化......
我有:
label = [[UILabel alloc] init];
label.numberOfLines = 1;
label.adjustsFontSizeToFitWidth = YES;
label.font = [UIFont fontWithName:FONT_DIGITAL size:60];
[label setMinimumScaleFactor:8.0/label.font.pointSize];
label.textAlignment = NSTextAlignmentCenter;
label.frame = CGRectMake(0, 0, self.width, self.height);
label.text = @"TEXT";
[self addSubview:valueLabel];
有人有解决办法吗?
【问题讨论】:
可能重复 - ***.com/questions/9059631/… 使用“adjustFontSizeToFit”类别方法。那应该可以解决问题。希望对您有所帮助。 【参考方案1】:您应该如下图所示设置标签的自动收缩属性。
希望这会有所帮助。
【讨论】:
我不使用界面生成器。您知道如何以编程方式进行操作吗? 您是否将“numberOfLines”属性设置为 1 ? 看看这个:***.com/questions/9908334/…【参考方案2】:以下答案是一种技巧(不是最佳解决方案),但它确实有效,因此如果您愿意,可以尝试:
- (void) sizeLabel: (UILabel *) label toRect: (CGRect) labelRect
// Set the frame of the label to the targeted rectangle
label.frame = labelRect;
// Try all font sizes from largest to smallest font size
CGFloat fontSize = 16.0f;
CGFloat minFontSize = 5.0f;
// Fit label width wize
CGSize constraintSize = CGSizeMake(label.frame.size.width, MAXFLOAT);
do
// Set current font size
label.font = [UIFont fontWithName:label.font.fontName size:fontSize];
// Find label size for current font size
CGRect textRect = [[label text] boundingRectWithSize:constraintSize
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@NSFontAttributeName:label.font
context:nil];
CGSize labelSize = textRect.size;
// Done, if created label is within target size
if( labelSize.height <= label.frame.size.height )
break;
// Decrease the font size and try again
fontSize -= 1.0f;
while (fontSize > minFontSize);
【讨论】:
以上是关于在IOS8上根据边框大小设置UILabel字体大小?的主要内容,如果未能解决你的问题,请参考以下文章
两个具有不同字体大小的自动布局 UILabel:文本顶部对齐