垂直随意对齐文本
来源:互联网 发布:perl语言编程 编辑:程序博客网 时间:2024/05/30 23:24
UILabelz子类 – 垂直随意对齐文本
2010-03-01 14:22:25| 分类:iPhone develop |字号 订阅
有人问到怎样正确地对齐UILabel的文字。他们需要UILabel容纳多行文本,但也需要调整文本,他们遇到的问题是单行文本在垂直方向总是居中对齐。
在apple论坛上:
http://discussions.apple.com/thread.jspa?threadID=1759957有人提供的UILabel子类可以解决这个问题:
此子类如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Label2.h
// (c) 2009 Ivan Misuno, www.cuberoom.biz<br>
#import <UIKit/UIKit.h>
typedef enum
{
VerticalAlignmentTop = 0,// default
VerticalAlignmentMiddle,
VerticalAlignmentBottom,
} VerticalAlignment;
@interface Label2 : UILabel
{
@private
VerticalAlignment _verticalAlignment;
}
@property (nonatomic) VerticalAlignment verticalAlignment;
@end
// (c) 2009 Ivan Misuno, www.cuberoom.biz<br>
#imp
typedef enum
{
VerticalAlignmentTop = 0,// default
VerticalAlignmentMiddle,
VerticalAlignmentBottom,
} VerticalAlignment;
@interface Label2 : UILabel
{
@private
VerticalAlignment _verticalAlignment;
}
@property (nonatomic) VerticalAlignment verticalAlignment;
@end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
// Label2.mm
// (c) 2009 Ivan Misuno, www.cuberoom.biz
#import "Label2.h"
@implementation Label2
-(id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (!self)returnnil;
_verticalAlignment = VerticalAlignmentTop;
return self;
}
-(void)dealloc
{
[super dealloc];
}
-(VerticalAlignment) verticalAlignment
{
return _verticalAlignment;
}
-(void) setVerticalAlignment:(VerticalAlignment)value
{
_verticalAlignment = value;
[self setNeedsDisplay];
}
// align text block according to vertical alignment settings
-(CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines
{
CGRect rect = [super textRectForBounds:bounds limitedToNumberOfLines:numberOfLines];
CGRect result;
switch(_verticalAlignment)
{
case VerticalAlignmentTop:
result = CGRectMake(bounds.origin.x, bounds.origin.y, rect.size.width, rect.size.height);
break;
case VerticalAlignmentMiddle:
result = CGRectMake(bounds.origin.x, bounds.origin.y+
(bounds.size.height - rect.size.height)/ 2, rect.size.width, rect.size.height);
break;
case VerticalAlignmentBottom:
result = CGRectMake(bounds.origin.x, bounds.origin.y+
(bounds.size.height - rect.size.height), rect.size.width, rect.size.height);
break;
default:
result = bounds;
break;
}
return result;
}
-(void)drawTextInRect:(CGRect)rect
{
CGRect r = [self textRectForBounds:rect limitedToNumberOfLines:self.numberOfLines];
[super drawTextInRect:r];
}
@end
// (c) 2009 Ivan Misuno, www.cuberoom.biz
#imp
@implementation Label2
-(id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (!self)returnnil;
_verticalAlignment = VerticalAlignmentTop;
return self;
}
-(void)dealloc
{
[super dealloc];
}
-(VerticalAlignment) verticalAlignment
{
return _verticalAlignment;
}
-(void) setVerticalAlignment:(VerticalAlignment)value
{
_verticalAlignment = value;
[self setNeedsDisplay];
}
// align text block according to vertical alignment settings
-(CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines
{
CGRect rect = [super textRectForBounds:bounds limitedToNumberOfLines:numberOfLines];
CGRect result;
switch(_verticalAlignment)
{
case VerticalAlignmentTop:
result = CGRectMake(bounds.origin.x, bounds.origin.y, rect.size.width, rect.size.height);
break;
case VerticalAlignmentMiddle:
result = CGRectMake(bounds.origin.x, bounds.origin.y+
(bounds.size.height - rect.size.height)/ 2, rect.size.width, rect.size.height);
break;
case VerticalAlignmentBottom:
result = CGRectMake(bounds.origin.x, bounds.origin.y+
(bounds.size.height - rect.size.height), rect.size.width, rect.size.height);
break;
default:
result = bounds;
break;
}
return result;
}
-(void)drawTextInRect:(CGRect)rect
{
CGRect r = [self textRectForBounds:rect limitedToNumberOfLines:self.numberOfLines];
[super drawTextInRect:r];
}
@end
你可以在使用UILabel的地方使用Label2。可以通过将setVerticalAlignment设为VerticalAlignmentTop, VerticalAlignmentMiddle, 或 VerticalAlignmentBottom的方法将文本对齐在顶部,中间或底部。十分方便!
原文:UILabel Subclass – Align The Text How You Want!
- 垂直随意对齐文本
- 关于 input 文本垂直对齐
- svg -> text文本水平、垂直居中。文本垂直对齐方式
- 【css基础】文本对齐,水平对齐,垂直对齐
- 【css基础】文本对齐,水平对齐,垂直对齐
- CSS----文本缩进,文本对齐,文本装饰,文本变形,链接,垂直对齐
- 垂直对齐方式vertical-align、文本转换text-transform
- 关于Div CSS布局:文本输入框与文本或按钮垂直不对齐
- 对齐文本
- 文本对齐
- 文本对齐
- HTML textarea 文本区域 外面说明文字垂直居中对齐的问题
- iOS 控件——UILable多文本垂直方向对齐的设置
- 水平、垂直对齐
- UITextField垂直居中对齐
- 文字垂直对齐问题
- UITextField垂直居中对齐
- UITextField垂直居中对齐
- C# 让ListBox可编辑
- 在ListView上显示带有图片的提示信息
- LINUX C 获取文件类型 以及访问权限
- C/C++的一些预定义宏
- 亲爱的 我们可以不吵架
- 垂直随意对齐文本
- C# Socket连接请求超时机制
- Struts+Servlet简单实现登录验证码
- Object的方法equals,hashCode,toString,clone。另外Comparable接口的方法
- CentOs下安装samba服务
- Socket基础之客户端(基于UDP)
- Ubuntu下给VirtualBox虚拟机分配USB设备
- Socket基础之服务端(基于UDP)
- 【汇编】汇编显示字符串