有人问到怎样正确地对齐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的方法将文本对齐在顶部,中间或底部。十分方便!



