黒毛和牛モモバラ切り落し100g298円

iPhoneアプリを作ってます。リリースノートとかごにょごにょとか用ブログです。

UIPickerViewのラベルにminimumScaleFactorを設定する

How to Implement

  1. [UIPickerViewDelegate pickerView:pickerView viewForRow:forComponent:reusingView:] から adjustsFontSizeToFitWidth と minimumScaleFactor を指定した UILabel を返す。
  2. [UIPickerViewDelegate pickerView:pickerView viewForRow:forComponent:reusingView:] を定義すると [UIPickerViewDelegate pickerView:titleForRow:forComponent:]Cocoa SDK から呼ばれなくなるのでそのまま使える(使いたく無ければ適当に処理を追加)。

Example

UIPickerViewDelegate を実装したクラスで以下を定義。

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    return [NSString stringWithFormat:@"row=%ld component=%ld", (long)row, (long)component];
}

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
    UILabel *label = (UILabel *)view;
    if (!label) {
        CGSize rowSize = [pickerView rowSizeForComponent:component];
        label = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, rowSize.width, rowSize.height)];
    }
    
    label.text = [self pickerView:pickerView titleForRow:row forComponent:component];
    label.font = [UIFont systemFontOfSize:20];
    label.textAlignment = NSTextAlignmentCenter;
    label.adjustsFontSizeToFitWidth = YES;
    label.minimumScaleFactor = 0.1;
    return label;
}