obj*_*jlv 38 objective-c uilabel ios
这是我的代码
UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(10, 50, 300, 50)];
label.textAlignment = UITextAlignmentCenter;
label.backgroundColor = [UIColor clearColor];
label.textColor = [UIColor whiteColor];
label.textColor.font = [UIFont fontWithName:@"Verdana" size:30];
label.text = @"A very long string";
etc...
Run Code Online (Sandbox Code Playgroud)
问题是字体很大,无法放入标签中.它只显示"非常"
怎么做才能显示整个文本.我试过了
label.lineBreakMode = UILineBreakModeWordWrap;
label.numberOfLines = 0;
Run Code Online (Sandbox Code Playgroud)
但它对我不起作用.我想以编程方式做到这一点.
//编辑
CGRect frame = CGRectMake(10, 50, 300, 50);
NSString *labelString = @"Players.";
UILabel *howManyUsersLabel = [[UILabel alloc]initWithFrame:frame];
howManyUsersLabel.textAlignment = UITextAlignmentCenter;
howManyUsersLabel.backgroundColor = [UIColor clearColor];
howManyUsersLabel.textColor = [UIColor whiteColor];
howManyUsersLabel.adjustsFontSizeToFitWidth = NO;
howManyUsersLabel.numberOfLines = 0;
CGFloat fontSize = 30;
while (fontSize > 0.0)
{
CGSize size = [labelString sizeWithFont:[UIFont fontWithName:@"Verdana" size:fontSize] constrainedToSize:CGSizeMake(frame.size.width, 10000) lineBreakMode:UILineBreakModeWordWrap];
if (size.height <= frame.size.height) break;
fontSize -= 1.0;
NSLog(@"test");
}
howManyUsersLabel.font = [UIFont fontWithName:@"Verdana" size:fontSize];
Run Code Online (Sandbox Code Playgroud)
Nic*_*ood 89
我想你只需要添加这个:
label.adjustsFontSizeToFitWidth = YES;
label.minimumFontSize = 0;
Run Code Online (Sandbox Code Playgroud)
然后文本将自动调整大小以适合标签.
但请注意,只有在label.numberOfLines = 1时才会真正起作用,因此文本在一行上.
如果您需要将文本换行到多行但仍然缩小以适应,则解决方案更复杂.为此,您需要计算文本的渲染大小,然后在循环中减少它,如下所示:
NSString *theText = @"A long string";
CGRect labelRect = CGRectMake(10, 50, 300, 50);
label.adjustsFontSizeToFitWidth = NO;
label.numberOfLines = 0;
CGFloat fontSize = 30;
while (fontSize > 0.0)
{
CGSize size = [theText sizeWithFont:[UIFont fontWithName:@"Verdana" size:fontSize] constrainedToSize:CGSizeMake(labelRect.size.width, 10000) lineBreakMode:UILineBreakModeWordWrap];
if (size.height <= labelRect.size.height) break;
fontSize -= 1.0;
}
//set font size
label.font = [UIFont fontWithName:@"Verdana" size:fontSize];
Run Code Online (Sandbox Code Playgroud)
这基本上只是缩小了字体大小,直到它适合标签.
更新:
从iOS7开始,多行文本也会自动缩小adjustsFontSizeToFitWidth = YES,因此不再需要此答案的第二部分(除非您仍支持iOS 6及更早版本).
| 归档时间: |
|
| 查看次数: |
42164 次 |
| 最近记录: |