[爆栈热门 iOS 问题] 让 UILabel 顶端对齐
2017-01-24 14:45
531 查看
系列文集:爆栈热门 iOS 问题。目录在此。仓薯翻译,欢迎指正:)
我有一个
nevan king,1969 赞
没法直接改变
label 标为橘黄色了。
最简单的做法是:
sizeToFit
如果内容长度超过一行,把
有一个问题是,如果你文字是水平居中的,那么执行完
label 的宽度先存起来,执行完
另外要注意,
对于用 Auto Layout 的 NIB 和 Storyboard,Mark Amery 在评论中补充了解决方案:
如果 nib 或 storyboard 里用了 autoLayout,那么在
autoLayout,执行 autoLayout 的时候会把 sizeToFit 的结果覆盖掉。
不过,在
Purple Ninja Girl ,44 赞
一个更简单的办法(也是比较脏的办法)是把
这个方法不是万能的——尤其是如果文字超出范围,需要在末尾显示『…』就不行了。
jowie ,47 赞
用
Martin Wickman,21 赞
创建一个
详细说明见这里。
原文地址:Vertically align text within a UILabel
本文地址:http://www.jianshu.com/p/429470186933
系列文集:爆栈热门 iOS 问题
译者:@戴仓薯
问题
我有一个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,那么在
viewDidLoad调
sizeToFit是不管用的,因为实际顺序是先执行
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:重写UILabel
的drawInRect
方法
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
详细说明见这里。
原文地址:Vertically align text within a UILabel
本文地址:http://www.jianshu.com/p/429470186933
系列文集:爆栈热门 iOS 问题
译者:@戴仓薯
相关文章推荐
- [爆栈热门 iOS 问题] 让 UILabel 顶端对齐
- [爆栈热门 iOS 问题] 让 UILabel 顶端对齐
- IOS开发之----让UILabel 垂直方向顶端对齐的代码
- iOS开发之----让UILabel 垂直方向顶端对齐的代码
- iOS开发UILabel顶端对齐方式
- iOS的UILabel设置居上对齐,居中对齐,居下对齐
- UILabel顶端对齐
- iOS中关于设置UIButton文字和图标对齐格式的问题
- 让UILabel垂直方向顶端对齐
- 让 UILabel 垂直方向顶端对齐的代码
- 分享一个可垂直顶端对齐的UILabel
- ios下一个4字节对齐引起崩溃的问题
- UILabel顶端对齐
- iOS上如何让按钮文本左对齐问题
- ios UILabel设置居上对齐,居中对齐,居下对齐
- iOS的UILabel设置居上对齐,居中对齐,居下对齐
- UILabel 垂直方向顶端对齐
- UILabel中的文字顶端对齐
- IOS开发:关于UILabel阴影设置的问题
- ios开发UILabel换行的小问题