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 |
// 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 |
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 |
// Label2.mm
// (c) 2009 Ivan Misuno, www.cuberoom.biz #import "Label2.h" @implementation Label2 -(id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (!self)return nil; _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!