LabelView
此LabelView是用来将Label显示在固定的View上的,需要计算Label的高度与宽度.
源码:
NSString+StringHeight.h 与 NSString+StringHeight.m
//
// NSString+StringHeight.h
// USA
//
// Created by YouXianMing on 14/12/10.
// Copyright (c) 2014年 fuhuaqi. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface NSString (StringHeight)
/**
* 计算文本的高度
*
* @param font 字体
* @param width 固定的宽度
*
* @return 高度
*/
- (CGFloat)heightWithLabelFont:(UIFont *)font withLabelWidth:(CGFloat)width;
/**
* 计算文本的宽度
*
* @param font 字体
*
* @return 宽度
*/
- (CGFloat)widthWithLabelFont:(UIFont *)font;
@end
//
// NSString+StringHeight.m
// USA
//
// Created by YouXianMing on 14/12/10.
// Copyright (c) 2014年 fuhuaqi. All rights reserved.
//
#import "NSString+StringHeight.h"
@implementation NSString (StringHeight)
- (CGFloat)heightWithLabelFont:(UIFont *)font withLabelWidth:(CGFloat)width {
CGFloat height = 0;
if (self.length == 0) {
height = 0;
} else {
// 字体
NSDictionary *attribute = @{NSFontAttributeName: [UIFont systemFontOfSize:18.f]};
if (font) {
attribute = @{NSFontAttributeName: font};
}
// 尺寸
CGSize retSize = [self boundingRectWithSize:CGSizeMake(width, MAXFLOAT)
options:
NSStringDrawingTruncatesLastVisibleLine |
NSStringDrawingUsesLineFragmentOrigin |
NSStringDrawingUsesFontLeading
attributes:attribute
context:nil].size;
height = retSize.height;
}
return height;
}
- (CGFloat)widthWithLabelFont:(UIFont *)font {
CGFloat retHeight = 0;
if (self.length == 0) {
retHeight = 0;
} else {
// 字体
NSDictionary *attribute = @{NSFontAttributeName: [UIFont systemFontOfSize:18.f]};
if (font) {
attribute = @{NSFontAttributeName: font};
}
// 尺寸
CGSize retSize = [self boundingRectWithSize:CGSizeMake(MAXFLOAT, 0)
options:
NSStringDrawingTruncatesLastVisibleLine |
NSStringDrawingUsesLineFragmentOrigin |
NSStringDrawingUsesFontLeading
attributes:attribute
context:nil].size;
retHeight = retSize.width;
}
return retHeight;
}
@end
LabelView.h 与 LabelView.m
//
// LabelView.h
// YXMWeather
//
// Created by XianMingYou on 15/2/16.
// Copyright (c) 2015年 XianMingYou. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "NSString+StringHeight.h"
@interface LabelView : UIView
/**
* 文本
*/
@property (nonatomic, strong) NSString *text;
/**
* 文本颜色
*/
@property (nonatomic, strong) UIColor *textColor;
/**
* 文本字体
*/
@property (nonatomic, strong) UIFont *font;
/**
* 背景色
*/
@property (nonatomic, strong) UIColor *color;
/**
* 距离顶部的距离
*/
@property (nonatomic) CGFloat gapFromTop;
/**
* 距离底部的距离
*/
@property (nonatomic) CGFloat gapFromBottom;
/**
* 距离左侧的距离
*/
@property (nonatomic) CGFloat gapFromLeft;
/**
* 距离右侧的距离
*/
@property (nonatomic) CGFloat gapFromRight;
/**
* 创建出view
*/
- (void)buildView;
/**
* 创建出默认配置的label
*
* @param text 字符串
* @param origin 起始位置
*
* @return 实例对象
*/
+ (instancetype)createWithText:(NSString *)text atOrigin:(CGPoint)origin;
@end
//
// LabelView.m
// YXMWeather
//
// Created by XianMingYou on 15/2/16.
// Copyright (c) 2015年 XianMingYou. All rights reserved.
//
#import "LabelView.h"
@interface LabelView ()
@property (nonatomic) CGFloat labelWidth;
@property (nonatomic) CGFloat labelHeight;
@property (nonatomic, strong) UILabel *label;
@end
@implementation LabelView
- (void)buildView {
// 设置label
self.label.text = self.text;
self.label.font = self.font;
self.label.textColor = self.textColor;
// 获取宽度
self.labelWidth = [self.text widthWithLabelFont:self.font];
self.labelHeight = [self.text heightWithLabelFont:self.font withLabelWidth:MAXFLOAT];
self.label.width = self.labelWidth;
self.label.height = self.labelHeight;
// 计算间距
self.label.x = self.gapFromLeft;
self.label.y = self.gapFromTop;
// 重新设置尺寸
self.width = self.labelWidth + self.gapFromLeft + self.gapFromRight;
self.height = self.labelHeight + self.gapFromTop + self.gapFromBottom;
// 设置背景色
if (self.color) {
self.backgroundColor = self.color;
}
}
@synthesize label = _label;
- (UILabel *)label {
if (_label == nil) {
_label = [[UILabel alloc] initWithFrame:CGRectZero];
_label.textAlignment = NSTextAlignmentCenter;
[self addSubview:_label];
}
return _label;
}
+ (instancetype)createWithText:(NSString *)text atOrigin:(CGPoint)origin {
LabelView *labelView = [[LabelView alloc] initWithFrame:CGRectMake(origin.x, origin.y, 0, 0)];
labelView.color = [UIColor blackColor];
labelView.text = text;
labelView.textColor = [UIColor whiteColor];
labelView.font = [UIFont fontWithName:LATO_BOLD size:8];
labelView.gapFromLeft = 10.f;
labelView.gapFromRight = 10.f;
labelView.gapFromTop = 2.f;
labelView.gapFromBottom = 2.f;
[labelView buildView];
return labelView;
}
@end
使用时候的源码:
LabelView *labelView = [LabelView createWithText:@"YouXianMing" atOrigin:CGPointMake(10, 90)];
[self.view addSubview:labelView];