原文地址:http://heidianfeng.blog.163.com/blog/static/61843456201103111444160/
UILabel 里放入多行文字,会发现 label 默认居中对齐,很不符合左对齐的传统习惯,下面这段 CocoaChina 版主“angellixf”分享的代码可以让 UILabel 以垂直方向顶端对齐,也就是我们常说的左对齐或右对齐
//// VerticallyAlignedLabel.h//#import <Foundation/Foundation.h>typedef enum VerticalAlignment { VerticalAlignmentTop, VerticalAlignmentMiddle, VerticalAlignmentBottom,} VerticalAlignment;@interface VerticallyAlignedLabel : UILabel {@private VerticalAlignment verticalAlignment_;}@property (nonatomic, assign) VerticalAlignment verticalAlignment;@end//// VerticallyAlignedLabel.m//#import "VerticallyAlignedLabel.h"@implementation VerticallyAlignedLabel@synthesize verticalAlignment = verticalAlignment_;- (id)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { self.verticalAlignment = VerticalAlignmentMiddle; } return self;}- (void)setVerticalAlignment:(VerticalAlignment)verticalAlignment { verticalAlignment_ = verticalAlignment; [self setNeedsDisplay];}- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines { CGRect textRect = [super textRectForBounds:bounds limitedToNumberOfLines:numberOfLines]; switch (self.verticalAlignment) { case VerticalAlignmentTop: textRect.origin.y = bounds.origin.y; break; case VerticalAlignmentBottom: textRect.origin.y = bounds.origin.y + bounds.size.height - textRect.size.height; break; case VerticalAlignmentMiddle: // Fall through. default: textRect.origin.y = bounds.origin.y + (bounds.size.height - textRect.size.height) / 2.0; } return textRect;}-(void)drawTextInRect:(CGRect)requestedRect { CGRect actualRect = [self textRectForBounds:requestedRect limitedToNumberOfLines:self.numberOfLines]; [super drawTextInRect:actualRect];}@end