这与其他所有内容略有不同"我如何将文本置于中心UILabel"这里的问题......
我有UILabel一些文本,我希望将文本垂直居中UILabel.有什么大不了的,对吧?这是默认值.问题来了,因为我的文字是动态的,我打开了自动收缩.随着文本变大,字体大小缩小.你得到这种行为.

请注意,字体基线没有移动,我希望它移动,所以数字在UILabel's框架中垂直居中.
容易,对吗?我只记得框架的原始中心viewDidLoad
self.workoutTimeCenter = _workoutTimeLabel.center;
Run Code Online (Sandbox Code Playgroud)
然后我sizeToFit在更改文本后打电话,对吗?
[_workoutTimeLabel sizeToFit];
_workoutTimeLabel.center = _workoutTimeCenter;
Run Code Online (Sandbox Code Playgroud)
嗯,sizeToFit我猜,确切地说它应该做什么,调整框架的大小,使文字适合而不缩小!

如何在一段UILabel时间内将文本垂直居中,并遵循基线和自动收缩?(注意,iOS5及更高版本的解决方案很好,我甚至可以处理iOS6及更高版本的解决方案.)
Tom*_*ift 96
根据我的经验,您可以设置-[UILabel baselineAdjustment]属性UIBaselineAdjustmentAlignCenters以达到您描述的效果.
来自文档:
baselineAdjustment
控制在文本需要缩小以适合标签时如何调整文本基线.
Run Code Online (Sandbox Code Playgroud)@property(nonatomic) UIBaselineAdjustment baselineAdjustment讨论
如果
adjustsFontSizeToFitWidth属性设置为YES,则此属性控制在需要调整字体大小的情况下文本基线的行为.此属性的默认值为UIBaselineAdjustmentAlignBaselines.仅当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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21525 次 |
| 最近记录: |