[爆栈热门 iOS 问题] 让 UILabel 顶端对齐

系列文集:爆栈热门 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,那么在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

详细说明见这里

原文地址:Vertically align text within a UILabel

本文地址:http://www.jianshu.com/p/429470186933

系列文集:爆栈热门 iOS 问题

译者:@戴仓薯

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,262评论 4 61
  • Swift版本点击这里欢迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh阅读 25,591评论 7 249
  • #在生活中如何改变自己 ##我们中间的各种事情让你繁杂不堪 我们总会看到好多的事情不会如人意。所以我们该如何制造自...
    f46b0f4e2bc8阅读 334评论 0 1
  • 题记: “关总”和他的妻子从大学恋爱到结婚,如今已走过十年,去年还有可爱的宝宝——关一。现如今,他们成为了他们大学...
    默小语阅读 440评论 1 5
  • 给父母打了电话 爸爸跟我说妈妈腰痛又犯了 而且比以前更重了 说着便让妈妈接电话 "有啥说的,说了她也不知道"妈妈这...
    memory雪阅读 175评论 0 0