MBProgressHUD以显示多行文本标签(MBProgressHUD to show label

2019-08-17 03:19发布

嗨,我有我的iPad屏幕上的MBProgressHUD。 工作完全正常。 但我想改变标签在三个lines.Like这表明

    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的。 但我结束了只有一行。 我怎样才能做到这一点? 如果您需要更多的信息,请ask.Thanks。

Answer 1:

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



Answer 2:

为什么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];

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



Answer 3:

我有这样一个问题,太!

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

和它的作品!



Answer 4:

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



文章来源: MBProgressHUD to show label text in more than one line