UILabel顶部对齐解决方法(转载)
问题一
如何返回单行文字的高度
font.lineHeight,如label.font.lineHeight,可button.titleLabel.font.lineHeight
问题二
我有一个UILabel
高度最多能显示两行,如果里面内容只有一行,它是垂直居中的。怎么能让它顶端对齐呢?
回答
答案1:用sizeToFit
改变UILabel
的高度
nevan king,1969 赞
没法直接改变UILabel
的垂直对齐方式,但是把 label 的 frame 高度改小也能实现相同的效果。为了看得清楚,我把 label 标为橘黄色了。
最简单的做法是:
[myLabel 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
UILabel顶部对齐解决方法(转载)的更多相关文章
- UILabel文本垂直顶部对齐的方法
也不知道为什么UILabel本身没有提供文本垂直顶部对齐的方法,真的有点晕.我们创建一个简单的UILabel来看看: [box type="info"] UILabel *myLa ...
- “error LNK1169: 找到一个或多个多重定义的符号”的解决方法(转载)
解决方案: “error LNK1169: 找到一个或多个多重定义的符号”的解决方法(转载) 遇到的问题: 在.h头文件中采用namespace 命名空间报错 test.h namespace LMR ...
- ScrollView下嵌套GridView或ListView默认不在顶部的解决方法
自定义ScrollView重写下面的方法 /* ScrollView下嵌套GridView或ListView默认不在顶部的解决方法*/ @Override protected int computeS ...
- 为何存在requests库,pycharm依然报错解决方法 --转载
原文地址:https://www.jianshu.com/p/e28a72ba7809 今天在使用pycharm的时候,用到了第三档库requests,提示有错误,报错显示 No module nam ...
- centos 5的yum源无法使用的解决方法( 转载)
由于centos 5 已经停更.于是导致yum源也不能用了. 例如安装screen的时候提示 Determining fastest mirrors* base: denver.gaminghost. ...
- 关于angular跳转路由之后不能自动回到顶部的解决方法
Question: angular2 scroll top on router change 当我们在第一个路由滑动到底部当我们点击导航跳转到另一个路由时页面没有回到顶部而是保持上一个路由的滚动位置, ...
- java.lang.OutOfMemoryError: PermGen space及其解决方法(转载)
java.lang.OutOfMemoryError: PermGen space及其解决方法 分类: java2007-09-11 12:34 162242人阅读 评论(51) 收藏 举报 gene ...
- Firefox火狐Flash插件卡死问题完美解决方法(转载)
http://www.ihacksoft.com/firefox-flash-protectedmode.html 其实这个问题以前就出现过,而最近该问题又出现在最新的 Windows 8.1 系统中 ...
- C#调用matlab出错r6034错误解决方法[转载]
在c#调用MATLAB时,在运行第一次会出现r6034错误. 解决方法如下: 1.在MCR安装目录下D:\Program Files\MATLAB\MATLAB Compiler Runtime\v7 ...
随机推荐
- Autodesk 2013开发者日(DevDays)又要来了 -- 北京(2013年11月7日)和上海(2013年11月11日)
各位, 一年一度的Autodesk 开发者日(Devdays)开始注册了,抓紧时间前排占座! 注册地址: www.autodesk.com.cn/adndevday2013 今年开发者日的主题:革命性 ...
- Tomcat系统部署启动问题分析一例[sudo 启动]
今天的系统获取新的版本后部署时突然tomcat无法启动,而比较版本的变化内容,也就是几个jsp和js文件的变化,对于web.xml等都没有调整. 这个问题很是奇怪,下面把步骤总结一下,以避免类似的问题 ...
- An interesting experiment on China’s censorship
This paper presented a very interesting topic. Censorship in China has always drawn people's attenti ...
- UISlider相关
设置slider当前位置的图像 [slider setThumbImage:[UIImage imageNamed:@"dd.png"] forState:UIControlSta ...
- android gps定位LocationManager
android location provider有: * LocationManager.GPS_PROVIDER:GPS,精度比较高,但是慢而且消耗电力,而且可能因为天气原因或者障碍物而无法获取卫 ...
- Android实用代码七段(五)
前言 每次分享意味着每次都有进步,本系列以实用为主,欢迎和我分享和推荐好用的代码段~~ 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯伯 ...
- 【原】你真的懂iOS的autorelease吗?
或许这个题目起得有点太高调了,不过我只是想纠正一些童鞋对于autorelease的认识,如果能帮到几个人,那这篇文章也就值得了!当然,高手请绕道 本文主要探讨两个方面:(1)autorelease对象 ...
- C文件编译、链接指令
通过mac终端 输入指令: cc -c 文件名.c 可以把C文件编译成.o文件(其实是2进制文件) 然后通过指令 cc 文件名.o 把.o文件链接C文件所需要的C语言的底层库,成为可以直接运行的lin ...
- Java中用内存映射处理大文件
在处理大文件时,如果利用普通的FileInputStream 或者FileOutputStream 抑或RandomAccessFile 来进行频繁的读写操作,都将导致进程因频繁读写外存而降低速度.如 ...
- 分页查询的SQL语句
select * from(select row_number() over (ORDER BY Id DESC) cyqrownum,t.* from [Table_TY_Member] t ) v ...