MBProgressHUD在多行显示标签文本

嗨,我的iPad屏幕上有一个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分钟

或者我可以分配一个图像的HUD?

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

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字体。

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

这两个标签之间的差异因其目的而非常明显,例如:

  • 标题具有较大的字体,与细节文本相比粗体粗体。
  • 标题的意思是简短而明显的,取自一个stream行的字典网站(说明本身):

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

我build议不要使用多行标题,简短地使用说明文字。

多行标题之所以不起作用,是因为layoutSubviews的实现,大小并没有被计算出来。 如果您在layoutSubviews中检查MBProgressHud.m,

 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:]计算显示文本所需的大小,但只能显示一行。

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

如果您只需拥有多行标题(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);