核心代码:
import "HCTextView.h"
import "UIView+CLKAddition.h"
#import "Masonry.h"
#define ScreenWidth [UIScreen mainScreen].bounds.size.width
#define WIDTH ScreenWidth/375
@implementation HCTextView
{
float _currentLineNum;
}
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.backgroundColor = [UIColor colorWithHexString:@"#E6E6E6"];
_currentLineNum=1;//默认文本框显示一行文字
[self addSubviews];
}
return self;
}
- (void)addSubviews{
self.commentField = [[UITextView alloc]init];
self.commentField.backgroundColor = [UIColor colorWithHexString:@"#f8f8f8"];
self.commentField.font = [UIFont systemFontOfSize:12];
self.commentField.text = @"|说说你的看法~";
self.commentField.textColor = [UIColor colorWithHexString:@"#a0a0a0"];
self.commentField.layer.cornerRadius = 4;
self.commentField.layer.masksToBounds = YES;
[self addSubview:self.commentField];
self.commentField.contentInset = UIEdgeInsetsMake(-66,0,0,0);
self.commentField.delegate = self;
self.publishBtn = [[UIButton alloc]init];
[self.publishBtn setTitle:@"发布" forState:UIControlStateNormal];
[self.publishBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[self.publishBtn setBackgroundColor:[UIColor colorWithHexString:@"23aBec"]];
self.publishBtn.layer.cornerRadius = 2;
self.publishBtn.layer.masksToBounds = YES;
[self addSubview:self.publishBtn];
}
-(void)layoutSubviews{
[super layoutSubviews];
[self.publishBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(CGSizeMake(80*WIDTH, 32));
make.right.equalTo(@-10);
make.bottom.equalTo(@-8);
}];
[self.commentField mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(@10);
make.right.equalTo(self.publishBtn.mas_left).offset(-10);
make.centerY.mas_equalTo(self);
make.height.greaterThanOrEqualTo(@26);
}];
}
#pragma mark - UITextViewDelegate
- (void)textViewDidBeginEditing:(UITextView *)textView {
if ([textView.text isEqualToString:@"|说说你的看法~"]) {
textView.text = @"";
self.commentField.textColor = [UIColor colorWithHexString:@"#646464"];
self.commentField.contentInset = UIEdgeInsetsMake(2,0,-2,0);
}
}
- (void)textViewDidEndEditing:(UITextView *)textView {
if (textView.text.length<1) {
textView.text = @"|说说你的看法~";
textView.textColor = [UIColor colorWithHexString:@"#a0a0a0"];
}
self.commentField.contentInset = UIEdgeInsetsMake(2,0,-2,0);
}
-(void)textViewDidChange:(UITextView *)textView{
float textViewWidth=textView.frame.size.width;//取得文本框高度
NSString *content=textView.text;
NSDictionary *dict=@{NSFontAttributeName:[UIFont systemFontOfSize:12.0]};
CGSize contentSize=[content sizeWithAttributes:dict];//计算文字长度
float numLine=ceilf(contentSize.width/textViewWidth); //计算当前文字长度对应的行数
if (numLine>10) {
numLine=10;
}
CGFloat heightText = 14;
if (numLine != 0) {
if (numLine>_currentLineNum) {
self.frame = CGRectMake(self.frame.origin.x,self.frame.origin.y-heightText*(numLine-_currentLineNum), ScreenWidth, self.frame.size.height+heightText*(numLine-_currentLineNum));
[self.commentField mas_updateConstraints:^(MASConstraintMaker *make) {
make.height.equalTo(@(self.commentField.frame.size.height+heightText*(numLine-_currentLineNum)));
}];
_currentLineNum=numLine;
}else if(numLine<_currentLineNum){
self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y-heightText*(numLine-_currentLineNum), ScreenWidth, self.frame.size.height+heightText*(numLine-_currentLineNum));
[self.commentField mas_updateConstraints:^(MASConstraintMaker *make) {
make.height.equalTo(@(self.commentField.frame.size.height+heightText*(numLine-_currentLineNum)));
}];
_currentLineNum=numLine;
}
}
}
@end