2013-02-22 6 views
16

Ciao ho un MBProgressHUD sullo schermo del mio iPad. Funziona perfettamente bene. Ma voglio cambiare l'etichetta di mostrare in tre lines.Like questoMBProgressHUD per mostrare il testo dell'etichetta su più di una riga

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

Quindi voglio l'etichetta in 3 linee

caricamento dei dati.

Attendere prego

1-2 Minuti

O posso assegnare un'immagine al HUD?

Tutto questo dovrebbe essere nel testo dell'etichetta. Ma sto finendo con una sola riga. Come lo posso fare? Se avete bisogno di maggiori informazioni, si prega di chiedere. Grazie.

+0

Provare con '[NSString stringWithFormat: @" Caricamento dati. \ N Attendere. \ N 1-2 minuti "]'. Non sono sicuro che sia gestito in MBProgressHUD. – iDev

+0

@ ACB.I ho provato. Sempre nella stessa linea. – RookieAppler

+0

Quindi potrebbe essere necessario modificare l'implementazione di MBProgressHUD. Controlla se ci sono opzioni disponibili per questo. – iDev

risposta

34

MBProgressHUD's detailsLabelText è una proprietà multilinea ma non labelText.

Così, si può provare qualcosa di simile

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; 

È possibile impostare carattere detailsLabelText utilizzando la proprietà detailsLabelFont.

+1

È interessante. Per curiosità ho guardato attraverso la fonte cercando di capire perché detailsLabelText era multilinea ma labelText non era e non vedeva alcuna differenza. Sai quale parametro rende una multilinea e l'altra no? – hkatz

+2

Il parametro è numberOfLines. Impostalo in questo modo: label.numberOfLines = 0; –

3

Il motivo per cui labelText differisce dai dettagliTesto, immagino perché dovrebbe essere molto simile a UIAlertView dal punto di vista del titolo/descrizione.

Le differenze tra le due etichette è ben distinta a causa del loro scopo, per esempio:

  • titoli sono i caratteri più grandi, Oft volte audaci rispetto ai dettagli del testo.
  • Titoli sono destinati ad essere breve e ovvio, preso da un sito popolare dizionario (descrizione parla da sé):

Titolo: Un nome descrittivo; un epiteto.

Si consiglia di non disporre di un titolo su più righe, di mantenerlo breve e di utilizzare il testo descrittivo.

Il motivo per cui i titoli multilinea non funzionano è dovuto all'implementazione layoutSubviews, la dimensione non viene calcolata. se si ispezionare MBProgressHud.m, entro 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; 
} 

Annotare il -[NSString sizeWithFont: constrainedToSize: lineBreakMode:] chiamata per il testo della descrizione; questo metodo calcola la dimensione richiesta per visualizzare il testo, utilizzando tutte le linee necessarie, mentre lo -[NSString sizeWithFont:] calcola la dimensione richiesta per visualizzare il testo, ma solo fino a visualizzare una riga.

Vorrei sconsigliare di avere un titolo su più righe, e invece di fornire un titolo più breve, con qualche testo descrittivo per accompagnarlo.

Se si deve semplicemente avere il titolo su più righe (tutte le modifiche all'interno di 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]; 
    ... 

Sostituire:

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

Con:

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

Spero che questo non è troppo tardi per aiutare.

1

Anch'io avevo una domanda simile!

È possibile impostare hud.label.numberOfLines = 0;

e funziona!

0

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

Problemi correlati