原文地址: http://www.cocoachina.com/bbs/read.php?tid=19211
最简单的一句代码可以实现:
Label.frame = [Label textRectForBounds:Label.frame limitedToNumberOfLines:0];
如果用的地方比较多,可以子类化UILable方式扩展:
// // 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