1.设置label的EdgeInsets(内边距)
代码如下:
#import <UIKit/UIKit.h>
@interface EdgeLabel : UILabel
@property(nonatomic, assign) UIEdgeInsets edgeInsets;
@end
#import "EdgeLabel.h"
@implementation EdgeLabel
- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines {
UIEdgeInsets insets = self.edgeInsets;
CGRect rect = [super textRectForBounds:UIEdgeInsetsInsetRect(bounds, insets)
limitedToNumberOfLines:numberOfLines];
rect.origin.x -= insets.left;
rect.origin.y -= insets.top;
rect.size.width += (insets.left + insets.right);
rect.size.height += (insets.top + insets.bottom);
return rect;
}
- (void)drawTextInRect:(CGRect)rect {
[super drawTextInRect:UIEdgeInsetsInsetRect(rect, self.edgeInsets)];
}
@end
2.根据字符串动态改变label的高度
代码如下:
#import "ViewController.h"
#import "EdgeLabel.h"
#define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width
#define FONT_SIZE 14
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSString *titleContent = @"我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试我的测试";
EdgeLabel *label = [EdgeLabel new];
label.numberOfLines = 0;
label.edgeInsets = UIEdgeInsetsMake(0, 10, 10, 10);
label.textAlignment = NSTextAlignmentJustified;
label.font = [UIFont systemFontOfSize:FONT_SIZE];
label.textColor = [UIColor lightGrayColor];
label.backgroundColor = [UIColor cyanColor];
label.text = titleContent;
CGSize labelSize = [titleContent boundingRectWithSize:CGSizeMake(SCREEN_WIDTH - (label.edgeInsets.left + label.edgeInsets.right) , MAXFLOAT)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:FONT_SIZE]}
context:nil].size;
CGFloat realHeight = (SCREEN_WIDTH * (labelSize.height + label.edgeInsets.top + label.edgeInsets.bottom))/SCREEN_WIDTH;
label.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, realHeight);
label.center = self.view.center;
[self.view addSubview:label];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
@end
说明
1.因为我们在动态改变label高度的时候,设置了EdgeInsets,所以需要在
CGSize labelSize = [titleContent boundingRectWithSize:CGSizeMake(SCREEN_WIDTH - (label.edgeInsets.left + label.edgeInsets.right) , MAXFLOAT)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:FONT_SIZE]}
context:nil].size;
中让SCREEN_WIDTH
减去左右内边距的值 (label.edgeInsets.left + label.edgeInsets.right)
2.然后我们再重新计算高度,让之前的高度值加上
label
上下内边距的值,即:
CGFloat realHeight = (SCREEN_WIDTH * (labelSize.height + label.edgeInsets.top + label.edgeInsets.bottom))/SCREEN_WIDTH;
网友评论