Lý do tại sao labelText khác với detailsText, tôi tưởng tượng vì nó có nghĩa là rất giống với UIAlertView từ góc nhìn tiêu đề/mô tả.
Sự khác biệt giữa hai nhãn là khá khác biệt vì mục đích của họ, ví dụ:
- tựa đề có phông chữ lớn hơn, thời gian thường được in đậm trong so sánh với các văn bản chi tiết.
- Titles có nghĩa là để được ngắn gọn và rõ ràng, lấy từ một trang web từ điển phổ biến (mô tả nói cho chính nó):
Title: Tên mô tả; một biểu tượng.
Tôi khuyên bạn không nên có tiêu đề nhiều dòng, giữ tiêu đề ngắn và sử dụng văn bản mô tả.
Lý do tại sao tiêu đề nhiều dòng không hoạt động là do triển khai layoutSubviews, kích thước không được tính toán. nếu bạn kiểm tra MBProgressHud.m, trong 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;
}
Lưu ý: -[NSString sizeWithFont: constrainedToSize: lineBreakMode:]
gọi cho văn bản mô tả; phương pháp này tính toán kích thước cần thiết để hiển thị văn bản - sử dụng nhiều dòng nếu cần, trong khi -[NSString sizeWithFont:]
tính toán kích thước cần thiết để hiển thị văn bản, nhưng chỉ hiển thị một dòng.
Tôi khuyên bạn không nên có tiêu đề nhiều dòng và thay vào đó cung cấp tiêu đề ngắn hơn, với một số văn bản mô tả đi kèm với nó.
Nếu bạn chỉ cần có tiêu đề nhiều dòng (tất cả thay đổi trong 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];
...
Thay thế:
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];
Với:
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];
Hy vọng điều này không phải là quá muộn để giúp đỡ.
Hãy thử với '[Chuỗi ký tự kết nốiWithFormat: @" Đang tải dữ liệu. \ N Vui lòng đợi. \ N 1-2 phút "]'. Không chắc chắn nếu nó được xử lý trong MBProgressHUD. – iDev
@ ACB.I đã thử. Vẫn trong cùng một dòng. – RookieAppler
Sau đó, bạn có thể phải sửa đổi cài đặt MBProgressHUD. Kiểm tra xem có bất kỳ tùy chọn nào có sẵn cho việc này hay không. – iDev