私の経験では、-[UILabel baselineAdjustment]
プロパティを設定するだけで、UIBaselineAdjustmentAlignCenters
説明している効果を得ることができます。
ドキュメントから:
ベースライン調整
ラベルに収まるようにテキストを縮小する必要がある場合に、テキストのベースラインを調整する方法を制御します。
@property(nonatomic) UIBaselineAdjustment baselineAdjustment
討論
adjustsFontSizeToFitWidth
プロパティが に設定されている場合YES
、このプロパティは、フォント サイズの調整が必要な状況でのテキスト ベースラインの動作を制御します。このプロパティのデフォルト値は ですUIBaselineAdjustment
AlignBaselines
。このプロパティは、numberOfLines
プロパティが に設定されて
いる場合にのみ有効1
です。
と
UIBaselineAdjustmentAlignCenters
境界ボックスの中心を基準にしてテキストを調整します。
編集:これを示す完全なビューコントローラーを追加します:
@interface TSViewController : UIViewController
@end
@implementation TSViewController
- (void) addLabelWithFrame: (CGRect) f baselineAdjustment: (UIBaselineAdjustment) bla
{
UILabel* label = [[UILabel alloc] initWithFrame: f];
label.baselineAdjustment = bla;
label.adjustsFontSizeToFitWidth = YES;
label.font = [UIFont fontWithName: @"Courier" size: 200];
label.text = @"00";
label.textAlignment = NSTextAlignmentCenter;
label.backgroundColor = [UIColor lightGrayColor];
label.userInteractionEnabled = YES;
[self.view addSubview: label];
UIView* centerline = [[UIView alloc] initWithFrame: CGRectMake(f.origin.x, f.origin.y+(f.size.height/2.0), f.size.width, 1)];
centerline.backgroundColor = [UIColor redColor];
[self.view addSubview: centerline];
UITapGestureRecognizer* tgr = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(onTap:)];
[label addGestureRecognizer: tgr];
}
- (void) viewDidLoad
{
[super viewDidLoad];
[self addLabelWithFrame: CGRectMake(0, 0, 320, 200)
baselineAdjustment: UIBaselineAdjustmentAlignCenters];
[self addLabelWithFrame: CGRectMake(0, 220, 320, 200)
baselineAdjustment: UIBaselineAdjustmentAlignBaselines];
}
- (void) onTap: (UITapGestureRecognizer*) tgr
{
UILabel* label = (UILabel*)tgr.view;
NSString* t = [label.text stringByAppendingString: @":00"];
label.text = t;
}
@end