码迷,mamicode.com
首页 > 其他好文 > 详细

UILabel顶部对齐解决方法(转载)

时间:2016-05-06 19:27:44      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:

问题

我有一个UILabel高度最多能显示两行,如果里面内容只有一行,它是垂直居中的。怎么能让它顶端对齐呢?

技术分享
 

回答

答案1:用sizeToFit改变UILabel的高度

nevan king,1969 赞

没法直接改变UILabel的垂直对齐方式,但是把 label 的 frame 高度改小也能实现相同的效果。为了看得清楚,我把 label 标为橘黄色了。

最简单的做法是:

[myLabel sizeToFit];
技术分享
sizeToFit

如果内容长度超过一行,把numberOfLines设成 0(就是不限制行数)。

myLabel.numberOfLines = 0; 
[myLabel sizeToFit];

有一个问题是,如果你文字是水平居中的,那么执行完sizeToFit后 frame 宽度也缩小了,文字会缩到左上角。解决方法是把 label 的宽度先存起来,执行完sizeToFit之后再设回来。

另外要注意,sizeToFit 会把 label 的当前宽度当做最大宽度,执行之后宽度只会比变窄,不会变宽。

对于用 Auto Layout 的 NIB 和 Storyboard,Mark Amery 在评论中补充了解决方案:

如果 nib 或 storyboard 里用了 autoLayout,那么在viewDidLoadsizeToFit是不管用的,因为实际顺序是先执行viewDidLoad再执行 autoLayout,执行 autoLayout 的时候会把 sizeToFit 的结果覆盖掉。
不过,在viewDidLayoutSubviews里调sizeToFit管用的。


答案2:末尾补充换行

Purple Ninja Girl ,44 赞

一个更简单的办法(也是比较脏的办法)是把UILabel的 line break mode 设为 Clip,然后直接在末尾加一些换行。

myLabel.lineBreakMode = UILineBreakModeClip;myLabel.text = [displayString stringByAppendingString:"\n\n\n\n"];

这个方法不是万能的——尤其是如果文字超出范围,需要在末尾显示『…』就不行了。


答案3:用UITextField代替UILabel

jowie ,47 赞

UITextField取代UILabel,默认就是顶端对齐的。可以把userInterationEnabled设为NO,让它不能滚动。


答案4:重写UILabeldrawInRect方法

Martin Wickman,21 赞

创建一个UILabel的子类,用起来非常方便:

// TopLeftLabel.h
#import <Foundation/Foundation.h>
@interface TopLeftLabel : UILabel {
}
@end
// TopLeftLabel.m
#import "TopLeftLabel.h"
@implementation TopLeftLabel
- (id)initWithFrame:(CGRect)frame { 
    return [super initWithFrame:frame];
}
- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines {
    CGRect textRect = [super textRectForBounds:bounds limitedToNumberOfLines:numberOfLines]; 
    textRect.origin.y = bounds.origin.y; 
    return textRect;
}
-(void)drawTextInRect:(CGRect)requestedRect { 
    CGRect actualRect = [self textRectForBounds:requestedRect limitedToNumberOfLines:self.numberOfLines]; 
    [super drawTextInRect:actualRect];
}
@end



文/戴仓薯(简书作者)
原文链接:http://www.jianshu.com/p/429470186933
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

UILabel顶部对齐解决方法(转载)

标签:

原文地址:http://www.cnblogs.com/TheYouth/p/5466692.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!