2014年8月28日木曜日

iPadでsizeToFitを使う場合の注意

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 件のコメント:

コメントを投稿