您的位置:首页 > 产品设计 > UI/UE

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

2013-11-18 17:27 330 查看
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 = [super
initWithFrame:frame]) {

self.edgeInset = edgeInset;
}

return
self;
}

- (id)initWithEdgeInset:(UIEdgeInsets)edgeInset{

if (self = [super
init]) {

self.edgeInset = edgeInset;
}

return
self;
}

-(void)drawTextInRect:(CGRect)rect{

[super
drawTextInRect: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 = [super
initWithFrame:frame];

if (self) {

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)drawRect:(CGRect)rect
{

CGRect actualRect = [self
textRectForBounds:rect limitedToNumberOfLines:self.numberOfLines];
[super
drawTextInRect:actualRect];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: