让 UILabel 垂直方向顶端对齐的代码

    技术2022-05-20  37

    原文地址:http://heidianfeng.blog.163.com/blog/static/61843456201103111444160/

    让 UILabel 垂直方向顶端对齐的代码

    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


    最新回复(0)