2013-02-22 150 views
16

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

回答

34

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

3

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]; 

希望這不是爲時已晚,以幫助。

1

我也有過這樣的問題!

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

和它的作品!

0

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