18

嗨,我的 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 吗?

所有这些都应该在标签文本中。但我最终只有一行。我怎样才能做到这一点?如果您需要更多信息,请询问。谢谢。

4

4 回答 4

35

MBProgressHUD 的 detailsLabelText 属性是多行但不是 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 字体。

于 2013-02-22T19:19:10.263 回答
5

我也有这样的问题!

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

它有效!

于 2017-06-09T02:34:41.103 回答
3

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

这两个标签之间的区别非常明显,因为它们的用途不同,例如:

  • 与详细文本相比,标题具有更大的字体,通常是粗体。
  • 标题应简短明了,取自流行的词典网站(描述不言自明):

标题:描述性名称;一个绰号。

我建议不要使用多行标题,保持简短,并使用描述文本。

多行标题不起作用的原因是由于 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:]计算显示文本所需的大小,但最多显示一行。

我建议不要使用多行标题,而是提供更短的标题,并附上一些描述文本。

如果您只是必须具有多行标题(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];

希望现在提供帮助还为时不晚。

于 2013-05-30T11:41:53.207 回答
0

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

于 2017-08-11T11:28:13.067 回答