Powód, dla którego labelText różni się od szczegółówTekst, wyobrażam sobie, ponieważ ma on być bardzo podobny do UIAlertView z perspektywy tytuł/opis.
Różnice między tymi dwoma etykietami jest dość wyraźna ze względu na ich przeznaczenie, na przykład:
- Tytuły mają większe czcionki, pogrubienie oft razy w porównaniu do szczegółów tekstu.
- Tytuły mają być krótkie i jasne, zaczerpnięty z popularnego serwisu słowniku (opis mówi sama za siebie):
Tytuł: opisową nazwę; epitet.
Zalecam, aby nie mieć tytułu z wieloma wierszami, krótkiego opisu i tekstu opisu.
Powodem, dla którego wieloliniowe tytuły nie działają, jest fakt, że z powodu implementacji layoutSubviews rozmiar nie jest obliczany. jeśli inspekcję MBProgressHud.m, w 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;
}
Zanotować -[NSString sizeWithFont: constrainedToSize: lineBreakMode:]
wzywają do tekstu opisu; ta metoda oblicza rozmiar wymagany do wyświetlenia tekstu - z użyciem jak największej liczby linii, podczas gdy -[NSString sizeWithFont:]
oblicza rozmiar wymagany do wyświetlenia tekstu, ale tylko do wyświetlenia jednej linii.
Odradzam posługiwanie się tytułem wielowierszowym, a zamiast tego zapewniam krótszy tytuł z dołączonym tekstem opisu.
Jeśli po prostu musisz mieć tytuł wielowierszowy (wszystkie zmiany w obrębie 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];
...
Wymienić:
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];
Z:
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];
nadzieję, że to nie jest zbyt późno, aby pomóc.
Spróbuj użyć '[NSString stringWithFormat: @" Ładowanie danych. \ N Proszę czekać. \ N 1-2 minuty "]'. Nie wiem, czy jest obsługiwane w MBProgressHUD. – iDev
@ ACB.Spróbowałem. Wciąż w tej samej linii. – RookieAppler
Następnie możesz zmodyfikować implementację MBProgressHUD. Sprawdź, czy są dostępne jakieś opcje. – iDev