UILabel的一些自定义用法的总结

来源:互联网 发布:linux 安装bcompare 编辑:程序博客网 时间:2024/05/20 01:33

1.UILabel的内边距的自定义

.h文件

#import <UIKit/UIKit.h>

@interface MyLabel :UILabel

@property (nonatomic,assign)UIEdgeInsets edgeInset;

- (id)initWithFrame:(CGRect)frame andEdgeInset:(UIEdgeInsets)edgeInset;

- (id)initWithEdgeInset:(UIEdgeInsets)edgeInset;

@end


.m文件

#import "MyLabel.h"

@implementation MyLabel


- (id)initWithFrame:(CGRect)frame andEdgeInset:(UIEdgeInsets)edgeInset{

   if (self = [superinitWithFrame:frame]) {

       self.edgeInset = edgeInset;

    }

    return self;

}


- (id)initWithEdgeInset:(UIEdgeInsets)edgeInset{

   if (self = [superinit]) {

       self.edgeInset = edgeInset;

    }

    return self;

}


-(void)drawTextInRect:(CGRect)rect{

    [superdrawTextInRect:UIEdgeInsetsInsetRect(rect,self.edgeInset)];

}

2.UILabel的垂直对齐方式

.头文件

#import <UIKit/UIKit.h>


typedef enum

{

    VerticalAlignmentTop =0, // default

    VerticalAlignmentMiddle,

    VerticalAlignmentBottom,

} VerticalAlignment;


@interface CustomeLabel :UILabel

{

    @private

       VerticalAlignment _verticalAlignment;

}


@property (nonatomic,assign)VerticalAlignment verticalAlignment;


@end


.m文件

#import "CustomeLabel.h"


@implementation CustomeLabel


- (id)initWithFrame:(CGRect)frame

{

   self = [superinitWithFrame:frame];

   if (self) {

        self.verticalAlignment =VerticalAlignmentMiddle;

    }

    return self;

}


- (void)setVerticalAlignment:(VerticalAlignment)verticalAlignment

{

   _verticalAlignment = verticalAlignment;

    [selfsetNeedsDisplay];

}


- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines

{

   CGRect textRect = [supertextRectForBounds:bounds limitedToNumberOfLines:numberOfLines];

    switch (self.verticalAlignment) {

        caseVerticalAlignmentTop:

            textRect.origin.y = bounds.origin.y;

           break;

        caseVerticalAlignmentBottom:

            textRect.origin.y = bounds.origin.y + bounds.size.height - textRect.size.height;

           break;

        caseVerticalAlignmentMiddle:

            // Fall through.

       default:

            textRect.origin.y = bounds.origin.y + (bounds.size.height - textRect.size.height) /2.0;

    }

   return textRect;

}


- (void)drawRect:(CGRect)rect

{

    CGRect actualRect = [selftextRectForBounds:rect limitedToNumberOfLines:self.numberOfLines];

    [superdrawTextInRect:actualRect];

}





原创粉丝点击