svprogresshud ios label newline frame mbprogresshud

ios - svprogresshud show time



MBProgressHUD para mostrar el texto de la etiqueta en más de una línea (4)

¡Yo también tenía una pregunta como esta!

Puede establecer hud.label.numberOfLines = 0;

¡Y funciona!

Hola, tengo un MBProgressHUD en la pantalla de mi iPad. Funciona perfectamente bien. Pero quiero cambiar la etiqueta para mostrar en tres líneas.

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

Así que quiero la etiqueta en 3 líneas.

Cargando datos.

Por favor espera

1-2 minutos

¿O puedo asignar una imagen al HUD?

Todo esto debe estar en el texto de la etiqueta. Pero estoy terminando con una sola línea. ¿Cómo puedo hacer eso? Si necesita más información, por favor pregunte. Gracias.


La propiedad detailsLabelText de MBProgressHUD es multilínea pero no la propiedad labelText.

Entonces, puedes probar algo como esto

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;

Puede establecer la fuente detailsLabelText usando la propiedad detailsLabelFont.


La razón por la que labelText difiere de detailsText, me imagino que se supone que es muy similar a UIAlertView desde la perspectiva del título / descripción.

Las diferencias entre las dos etiquetas son bastante distintas debido a su propósito, por ejemplo:

  • Los títulos tienen fuentes más grandes, muchas veces en negrita en comparación con el texto detallado.
  • Los títulos deben ser cortos y obvios, tomados de un sitio de diccionario popular (la descripción habla por sí misma):

Título: Un nombre descriptivo; un epíteto.

Recomiendo no tener un título de varias líneas, mantenerlo corto y usar el texto de la descripción.

La razón por la cual los títulos de varias líneas no funcionan es debido a la implementación de layoutSubviews, el tamaño no se está calculando. si inspecciona MBProgressHud.m, dentro de 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; }

Tenga en cuenta la -[NSString sizeWithFont: constrainedToSize: lineBreakMode:] para el texto de descripción; este método calcula el tamaño requerido para mostrar el texto, usando tantas líneas como sea necesario, mientras que -[NSString sizeWithFont:] calcula el tamaño requerido para mostrar el texto, pero solo hasta una línea.

Recomendaría no tener un título de varias líneas, y en su lugar proporcionaría un título más corto, con un texto descriptivo que lo acompañe.

Si simplemente debe tener el título de varias líneas (todos los cambios dentro de 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]; ...

Reemplazar:

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

Espero que esto no sea demasiado tarde para ayudar.


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