< meta http-equiv="description" content="UILabel 里放入多行文字,会发现 label 默认居中对齐,很不符合左对齐的传统习惯,下面这段 CocoaChina 版主“angellixf”分享的代码可以让 UILabel 以垂直方向顶端对齐,也就是我们常说的左对齐或右对齐 "/>

iPhone开发之让 UILabel 垂直方向顶端对齐

[来源] 达内    [编辑] 达内   [时间]2012-09-07

UILabel 里放入多行文字,会发现 label 默认居中对齐,很不符合左对齐的传统习惯,下面这段 CocoaChina 版主“angellixf”分享的代码可以让 UILabel 以垂直方向顶端对齐,也就是我们常说的左对齐或右对

  UILabel 里放入多行文字,会发现 label 默认居中对齐,很不符合左对齐的传统习惯,下面这段 CocoaChina 版主“angellixf”分享的代码可以让 UILabel 以垂直方向顶端对齐,也就是我们常说的左对齐或右对齐

  //

  // VerticallyAlignedLabel.h

  //

  #import

  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

资源下载