web-dev-qa-db-ja.com

ラベルテキストを複数行で表示するMBProgressHUD

こんにちは私はiPadの画面にMBProgressHUDを持っています。完全に正常に動作します。しかし、ラベルを3行で表示するように変更したいのですが、このように

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

だから私は3行のラベルが欲しい

データのロード。

お待ちください

1〜2分

または、HUDに画像を割り当てることはできますか?

これはすべてラベルテキストに含める必要があります。しかし、私は1行だけで終わっています。どうやってやるの?さらに詳しい情報が必要な場合は、お問い合わせください。ありがとうございます。

18
RookieAppler

MBProgressHUDのdetailsLabelTextプロパティは複数行ですが、labelTextプロパティではありません。

だから、あなたはこのようなことを試すことができます

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;

プロパティdetailsLabelFontを使用して、detailsLabelTextフォントを設定できます。

34
Shashikanth

私もこんな質問がありました!

hud.label.numberOfLines = 0;を設定できます

そしてそれはうまくいきます!

3
Xinyan.Wang

LabelTextがdetailsTextと異なる理由は、タイトル/説明の観点からUIAlertViewに非常に似ていることを意図しているためだと思います。

2つのラベルの違いは、次のような目的のためにまったく異なります。

  • タイトルのフォントは大きく、詳細テキストと比較して太字になることがよくあります。
  • タイトルは、人気のある辞書サイトから取られた、短くて明白なものです(説明はそれ自体を物語っています):

タイトル:わかりやすい名前。形容詞。

複数行のタイトルを付けず、短くして、説明テキストを使用することをお勧めします。

複数行のタイトルが機能しない理由は、layoutSubviewsの実装が原因であり、サイズは計算されていません。 layoutSubviews内でMBProgressHud.mを検査する場合、

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

説明テキストの-[NSString sizeWithFont: constrainedToSize: lineBreakMode:]呼び出しに注意してください。このメソッドは、テキストを表示するために必要なサイズを計算します-必要な数の行を使用しますが、-[NSString sizeWithFont:]はテキストを表示するために必要なサイズを計算しますが、最大で1行を表示します。

複数行のタイトルを使用しないことをお勧めします。代わりに、短いタイトルとそれに付随する説明テキストを提供します。

単に複数行のタイトルが必要な場合(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];  
    ...

交換:

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

と:

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

これが手遅れではないことを願っています。

3
user352891

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

0
Venkatesh G