MBProgressHUD在多行显示标签文本

问题描述:

嗨,我的iPad屏幕上有一个MBProgressHUD。完美的工作。但我想改变标签在三个lines.Like这个MBProgressHUD在多行显示标签文本

self.hud = [[MBProgressHUD alloc] initWithView:self.navigationController.view]; 
self.hud.frame = CGRectMake(0, 0, 120, 143); 

[self.navigationController.view addSubview:self.hud]; 
self.hud.delegate = self; 
self.hud.mode = MBProgressHUDModeAnnularDeterminate; 
NSString *strloadingText = [NSString stringWithFormat:@"Loading Data.\r Please Wait.\r 1-2 Minutes"]; 
NSLog(@"the loading text will be %@",strloadingText); 
self.hud.labelText = strloadingText; 
[self.hud show:YES]; 

显示所以我想在3线

加载数据的标签。

请稍候

1-2分钟

OR 我可以分配到HUD的形象呢?

所有这些都应该在labeltext中。但我只有一条线。我怎样才能做到这一点? 如果您需要更多信息,请询问。谢谢。

+0

试着用'[NSString stringWithFormat:@“加载数据。\ n请稍候。\ n 1-2分钟”]'。不确定它是否在MBProgressHUD中处理。 – iDev 2013-02-22 18:08:57

+0

@ ACB.I尝试过。仍然在同一行。 – RookieAppler 2013-02-22 18:09:40

+0

然后,您可能需要修改MBProgressHUD实施。检查是否有任何可用的选项。 – iDev 2013-02-22 18:11:06

MBProgressHUD的详细信息LabelText属性是多行但不是labelText属性。

所以,你可以尝试这样的事情

MBProgressHUD * hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; 
hud.frame = CGRectMake(0, 0, 120, 143); 

hud.mode = MBProgressHUDModeAnnularDeterminate; 
NSString *strloadingText = [NSString stringWithFormat:@"Loading Data."]; 
NSString *strloadingText2 = [NSString stringWithFormat:@" Please Wait.\r 1-2 Minutes"]; 

NSLog(@"the loading text will be %@",strloadingText); 
hud.labelText = strloadingText; 
hud.detailsLabelText=strloadingText2; 

您可以通过使用属性detailsLabelFont设置detailsLabelText字体。

+1

这很有趣。出于好奇,我查看了源代码,试图找出为什么detailsLabelText是多行,但labelText不是,也没有看到任何区别。你知道一个多行参数是多少,另一个不是? – hkatz 2013-05-26 20:12:21

+2

参数是numberOfLines。像这样设置它:label.numberOfLines = 0; – 2014-06-23 09:06:02

labelText与detailsText不同的原因,我想象是因为它与标题/描述视角的UIAlertView非常相似。

两个标签之间的差异是相当明显的,因为他们的目的,例如:

  • 标题有更大的字体,相对于详细文字加粗经常倍。
  • 标题意味着是短而明显,从一个流行的字典站点采取(描述不言自明):

名称:A描述性名称;一个加词。

我建议您不要使用多行标题,缩短标题并使用说明文字。

多行标题不工作的原因是因为layoutSubviews实现,大小没有被计算。如果你检查MBProgressHud.m,内layoutSubviews,

CGFloat remainingHeight = bounds.size.height - totalSize.height - kPadding - 4 * margin; 
CGSize maxSize = CGSizeMake(maxWidth, remainingHeight); 
CGSize detailsLabelSize = [detailsLabel.text sizeWithFont:detailsLabel.font 
          constrainedToSize:maxSize lineBreakMode:detailsLabel.lineBreakMode]; 
totalSize.width = MAX(totalSize.width, detailsLabelSize.width); 
totalSize.height += detailsLabelSize.height; 
if (detailsLabelSize.height > 0.f && (indicatorF.size.height > 0.f || labelSize.height > 0.f)) { 
    totalSize.height += kPadding; 
} 

注意-[NSString sizeWithFont: constrainedToSize: lineBreakMode:]呼吁的说明文字;此方法计算显示文本所需的大小 - 根据需要使用尽可能多的行,而-[NSString sizeWithFont:]计算显示文本所需的大小,但仅计算显示一行。

我建议不要有多行标题,而应提供一个较短的标题,并附上一些说明文字。

如果您只需拥有多行标题(MBProgressHud中的所有更改。M):

- (void)setupLabels { 
label = [[UILabel alloc] initWithFrame:self.bounds]; 
label.adjustsFontSizeToFitWidth = NO; 
label.textAlignment = MBLabelAlignmentCenter; 
label.opaque = NO; 
label.backgroundColor = [UIColor clearColor]; 
label.textColor = [UIColor whiteColor]; 
label.font = self.labelFont; 
label.text = self.labelText; 
>>> label.numberOfLines = 0; 
[self addSubview:label]; 
    ... 

替换:

CGSize labelSize = [label.text sizeWithFont:label.font]; 
labelSize.width = MIN(labelSize.width, maxWidth); 
totalSize.width = MAX(totalSize.width, labelSize.width); 
totalSize.height += labelSize.height; 
if (labelSize.height > 0.f && indicatorF.size.height > 0.f) { 
    totalSize.height += kPadding; 
} 

CGFloat remainingHeight = bounds.size.height - totalSize.height - kPadding - 4 * margin; 
CGSize maxSize = CGSizeMake(maxWidth, remainingHeight); 
CGSize detailsLabelSize = [detailsLabel.text sizeWithFont:detailsLabel.font 
          constrainedToSize:maxSize lineBreakMode:detailsLabel.lineBreakMode]; 

有了:

CGFloat remainingHeight = bounds.size.height - totalSize.height - kPadding - 4 * margin; 
CGSize maxSize = CGSizeMake(maxWidth, remainingHeight); 

CGSize labelSize = [label.text sizeWithFont:label.font constrainedToSize:maxSize lineBreakMode:label.lineBreakMode]; 
totalSize.width = MAX(totalSize.width, labelSize.width); 
totalSize.height += labelSize.height; 

if (labelSize.height > 0.f && indicatorF.size.height > 0.f) { 
    totalSize.height += kPadding; 
} 

remainingHeight = bounds.size.height - totalSize.height - kPadding - 4 * margin; 
CGSize detailsLabelSize = [detailsLabel.text sizeWithFont:detailsLabel.font 
          constrainedToSize:maxSize lineBreakMode:detailsLabel.lineBreakMode]; 

希望这不是为时已晚,以帮助。

我也有过这样的问题!

您可以设置hud.label.numberOfLines = 0;

和它的作品!

self.hud.minSize = CGSizeMake(300,100);