UILabelを使っている処理で、末尾の1文字が欠けるという現象が出た。
よくよく調べると、
・文字列中に半角文字が1文字だけある
・sizeToFitを使っている
・iPad(32/64bit共)のみである
であった。
更に調査した結果、興味深いことがわかった。
sizeToFitした結果のサイズを調べると、iPadのみ1ピクセル分少ないのだ。
CGRect frame=label.frame;
NSLog(@"元frame=%@",NSStringFromCGRect(frame));
[label sizeToFit];
frame=label.frame;
NSLog(@"後frame=%@",NSStringFromCGRect(frame));
この後frameの.size.width値がiPhoneでの結果に比べiPadは1小さい値が返ってきている。
さらに、UILabelでは、文字表示必要幅に対して1ピクセル分でも足りないと、末尾1文字がまるごと欠けるしまうようである。
iOS7のバグ。iOS6以前ではどうかは不明。
なので、対策としては
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
// iPadのみ
CGRect frame=label.frame;
frame.size.width=frame.size.width+1; // +1ピクセル
label.frame=frame;
}
とすればよい。
0 件のコメント:
コメントを投稿