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];
}
.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];
}
相关文章推荐
- action中servlet,request,session对象
- Android中常用的UI控件
- 定制UITableViewCell
- ios7 获取UITablleViewCell
- 浏览器Quirksmode(怪异模式)与CSS1compat
- Android中的Handler, Looper, MessageQueue和Thread
- Java:String、StringBuffer和StringBuilder的用法
- SSH整合,"sessionFactory " or "hibernateTemplate " is required异常
- data_quick 进度
- Postgre数据库Insert 、Query性能优化详解
- Android常见问题分析之自定义ListView FastScroller滑块图片 以及 android:fastScrollEnabled="true" 不起作用
- 设置Flash Builder4.6字体
- priority_queue&nbsp;优先队列
- UI基础UIWindow、UIView
- UITableView中多个UITextField时滚动问题
- AudioQueue使用
- buildroot
- 我的一次Postgre数据库Insert 、Query性能优化实践
- Storyboard里面的几种Segue区别及视图的切换:push,modal,popover,replace和custom
- SAP Study Notes: BW Queriy-Variables(变量)