2013-02-22 14 views
16

Hallo ich habe eine MBProgressHUD auf meinem iPad-Bildschirm. Funktioniert einwandfrei. Aber ich möchte das Etikett ändern, dies in drei lines.Like zeigenMBProgressHUD zum Anzeigen von Beschriftungstext in mehr als einer Zeile

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

So möchte ich das Label in 3 Zeilen

Laden von Daten.

bitte warten

1-2 Minuten

OR kann ich ein Bild in die HUD zuweisen?

All dies sollte in dem Labeltext sein. Aber ich komme mit nur einer Zeile. Wie kann ich das machen? Wenn Sie weitere Informationen benötigen, fragen Sie bitte. Danke.

+0

Versuchen Sie mit '[NSString stringWithFormat: @" Daten werden geladen. \ N Bitte warten. \ N 1-2 Minuten "]'. Nicht sicher, ob es in MBProgressHUD behandelt wird. – iDev

+0

@ ACB.Ich habe es versucht. Immer noch in derselben Linie. – RookieAppler

+0

Dann müssen Sie möglicherweise die Implementierung von MBProgressHUD ändern. Überprüfen Sie, ob hierfür Optionen verfügbar sind. – iDev

Antwort

34

MBProgressHUD der detailsLabelText Eigenschaft ist mehrzeilige aber nicht Labeltext-Eigenschaft.

So können Sie so etwas wie dieses

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; 

versuchen Sie detailsLabelText Schriftart mithilfe der Eigenschaft detailsLabelFont einstellen.

+1

Das ist interessant. Aus Neugierde schaute ich durch die Quelle und versuchte herauszufinden, warum detailsLabelText mehrzeilig war, aber LabelText war nicht und konnte keinen Unterschied erkennen. Weißt du, welcher Parameter eine Multilinie und die andere nicht macht? – hkatz

+2

Der Parameter ist numberOfLines. Stellen Sie es so ein: label.numberOfLines = 0; –

3

Der Grund, warum Labeltext von detailsText unterscheidet, ich stelle mir vor, weil es ein sehr ähnlich UIAlertView aus dem Titel/Beschreibung Perspektive zu sein, ist gemeint.

Die Unterschiede zwischen den beiden Markierungen sind wegen ihres Zwecks ganz verschieden, zum Beispiel:

  • Titel haben größere Schriftarten, fett oft mal im Vergleich zum Detailtext.
  • Titel sollen von einem beliebten Wörterbuch Seite kurz und klar, genommen werden (Beschreibung spricht für sich):

Titel: Ein beschreibender Name; ein Epitheton.

Ich würde empfehlen, keinen mehrzeiligen Titel zu haben, ihn kurz zu halten und den Beschreibungstext zu verwenden.

Der Grund, warum mehrzeiligen Titel nicht funktionieren, weil die layoutSubviews Implementierung wird die Größe nicht berechnet wird. wenn Sie inspizieren MBProgressHud.m, innerhalb 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; 
} 

Notiere die -[NSString sizeWithFont: constrainedToSize: lineBreakMode:] Aufruf für den Beschreibungstext; Diese Methode berechnet die Größe, die für die Anzeige des Textes erforderlich ist - mit so vielen Zeilen wie nötig, während -[NSString sizeWithFont:] die Größe berechnet, die für die Anzeige des Textes erforderlich ist, jedoch nur bis zur Anzeige einer Zeile.

würde ich abraten einen mehrzeiligen Titel hat, und stattdessen einen kürzeren Titel bietet, mit einiger Beschreibung Text, um ihn zu begleiten.

Wenn Sie einfach müssen die mehrzeiligen Titel (alle Änderungen innerhalb 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]; 
    ... 

ersetzen:

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

mit:

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

Hoffnung nicht zu spät ist, zu helfen.

1

Ich hatte auch so eine Frage!

Sie können hud.label.numberOfLines = 0;

gesetzt und es funktioniert!

0

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