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> #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 |
// Label2.mm // (c) 2009 Ivan Misuno, www.cuberoom.biz #imp @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!