【问题标题】:MBProgressHUD to show label text in more than one lineMBProgressHUD 在多行中显示标签文本
【发布时间】:2013-02-08 10:33:11
【问题描述】:

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

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

【问题讨论】:

  • 试试[NSString stringWithFormat:@"Loading Data.\n Please Wait.\n 1-2 Minutes"]。不确定是否在 MBProgressHUD 中处理。
  • @ACB. 我试过了。还是在同一行。
  • 那么您可能需要修改 MBProgressHUD 实现。检查是否有任何可用的选项。
  • @ACB。我可以为 MBProgressHUD 添加图像视图吗?
  • @ACB。我在 MBProgressHUD.m 中更改了 detailsLabel.numberOfLines=3。宾果游戏出现在 3 行中。我更改了 labelText 的行数,但它没有用。所以现在我将 detailsLabelText 设置为所需的字符串。

标签: ios label newline frame mbprogresshud


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我也有这样的问题!

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

    而且它有效!

    【讨论】:

      【解决方案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];
      

      希望这还不算太晚。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 这很有趣。出于好奇,我查看了源代码,试图弄清楚为什么 detailsLabelText 是多行的,但 labelText 不是,也看不到任何区别。你知道什么参数使一个多行而另一个不是吗?
        • 参数为numberOfLines。像这样设置:label.numberOfLines = 0;
        猜你喜欢
        • 2012-11-12
        • 1970-01-01
        • 2018-02-28
        • 2013-07-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多