UIAlertViewのラベルを調整しようと懸命に努力してきましたが、うまくいきません。文字列の長さに応じて正しくサイズ変更したい。サブクラス化する以外にできることはあまりないということを読みましたが、やろうとすると、それをいじるコツを見つけました。(以下のコード)
サイズを変更したり、フォントをフォーマットしたりして、小さな文字列を作成することができました。一部の文字列(<1000文字)はうまく収まりますが、文字列が大きい(> 1000文字)と見苦しくなります。
- ラベルは、余分なコンテンツに合わせて成長することを拒否します
- テキストサイズは小さくしても小さくなりません(文字列が小さいほど不要な場合は小さくなります。必要な場合は小さくなります)
- ラベルは、大きな文字列の場合は白い背景(デザイン時にIBで表示されるもの)で表示され、テキストが大きいために文字列の末尾部分が埋め込まれます。
全体が完全に台無しに見えます。
UIAlertViewの外観コードに潜入した方法は次のとおりです。
-(void)willPresentAlertView:(UIAlertView *)alertView
{
UILabel *body = [alertView valueForKey:@"_bodyTextLabel"];
body.lineBreakMode = UILineBreakModeWordWrap;
// body.adjustsFontSizeToFitWidth = YES;
CGRect alFrame = body.frame;
CGFloat pointSize;
UIFont * font = [UIFont fontWithName:@"Verdana" size:10];
CGSize labelSize = [body.text sizeWithFont:font minFontSize:8 actualFontSize:&pointSize forWidth:alFrame.size.width lineBreakMode:UILineBreakModeWordWrap];
NSLog (@"%f", labelSize.height);
UIFont *actualFont = [UIFont fontWithName:@"Verdana" size:10];
CGSize sizeWithCorrectHeight = [body.text sizeWithFont:actualFont];
alFrame.size.height = sizeWithCorrectHeight.height*10;
NSLog (@"%f - %f", alFrame.size.height, alFrame.size.width);
body.numberOfLines = 8;
body.frame = alFrame;
body.font = actualFont;
}
コメントされた行は、私が何千ものひねりを加えて試したものであることに注意してください。また、コメントされていないものも同じ効果を生み出します。小さいテキストは、ここでコーディングしたとおりに調整されます。文字列の長さに関係なく、ラベルにすべてのテキストを表示できるソリューションが必要です。まだ十分なスペースがあることはわかっていますが、大きな文字列に合わせてサイズが変更されることはありません。