欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

iOS 自适应高度,改变字体颜色

程序员文章站 2022-03-04 13:29:21
#define kMainBoundsWidth ([UIScreen mainScreen].bounds).size.width //屏幕的宽度 #define kFont [UIFont systemFontOfSize:17.f] //字体大小 #define kLineSpacing 7 ... ......

 

iOS 自适应高度,改变字体颜色

 

#define kMainBoundsWidth    ([UIScreen mainScreen].bounds).size.width //屏幕的宽度
#define kFont               [UIFont systemFontOfSize:17.f] //字体大小
#define kLineSpacing        7 //行间距
- (void)viewDidLoad {
    [super viewDidLoad];
    
    //将view背景颜色变更为黄色
    self.view.backgroundColor = [UIColor grayColor];

    self.textView.text = @"I got a question regarding objc blocks. If you want to use self in a block you should weakify it and strongify it again in the block so you don't get into a retain cycle.";//文字内容
    self.textField.text = @"regarding";//高亮内容
    self.lableContent.text = self.textView.text;//显示内容
    
    @weakify(self);
    [self.textView.rac_textSignal subscribeNext:^(NSString * _Nullable x) {
        @strongify(self);
        self.lableContent.text = x;
        [self layoutLableContent:self.textField.text content:x];
    }];
    
    //高亮文字
    [self.textField.rac_textSignal subscribeNext:^(NSString * _Nullable x) {
        [self layoutLableContent:self.textField.text content:self.lableContent.text];
    }];
}

/** 文字内容 */
-(UITextView *)textView{
    if (!_textView) {
        _textView = [[UITextView alloc] init];
        _textView.font = [UIFont systemFontOfSize:15.f];
        _textView.showsHorizontalScrollIndicator = YES;
        _textView.layer.cornerRadius = 4.f;
        _textView.layer.masksToBounds = YES;
        [self.view addSubview:_textView];
        
        [_textView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.top.equalTo(self.view).offset(80);
            make.centerX.equalTo(self.view);
            make.width.equalTo(self.view).multipliedBy(0.8);
            make.height.offset(100);
        }];
    }
    return _textView;
}

/** 高亮文字 */
-(UITextField *)textField{
    if (!_textField) {
        _textField = [UITextField new];
        _textField.placeholder = @"请输入高亮文字";
        _textField.layer.cornerRadius = 4.f;
        _textField.layer.masksToBounds = YES;
        _textField.textAlignment = NSTextAlignmentCenter;
        _textField.backgroundColor = [UIColor whiteColor];
        _textField.keyboardType = UITextAutocorrectionTypeNo;
        [self.view addSubview:_textField];
        
        [_textField mas_makeConstraints:^(MASConstraintMaker *make) {
            make.top.equalTo(_textView.mas_bottom).offset(30);
            make.centerX.equalTo(self.view);
            make.width.equalTo(self.view).multipliedBy(0.5);
            make.height.offset(50);
        }];
    }
    return _textField;
}

/** 目标文字 */
-(UILabel *)lableContent{
    if (!_lableContent) {
        _lableContent = [UILabel new];
        _lableContent.font = kFont;
        _lableContent.layer.cornerRadius = 4.f;
        _lableContent.layer.masksToBounds = YES;
        _lableContent.layer.borderColor = [UIColor yellowColor].CGColor;
        _lableContent.layer.borderWidth = 1.f;
        _lableContent.backgroundColor = [UIColor whiteColor];
        _lableContent.numberOfLines = 0;
        [self.view addSubview:_lableContent];
        
        [_lableContent mas_makeConstraints:^(MASConstraintMaker *make) {
            make.top.equalTo(_textField.mas_bottom).offset(50);
            make.centerX.equalTo(self.view);
            make.width.offset(kMainBoundsWidth-40);
            make.height.offset(200);
        }];
    }
    return _lableContent;
}

/** 更新数据 */
-(void)layoutLableContent:(NSString *)keyWord content:(NSString *)content{
    CGFloat width = kMainBoundsWidth-40;
    CGSize contentSize = [self adaptContentStringSizeWithFont:kFont withWidth:width content:content];
    CGSize size = CGSizeMake(width, contentSize.height+25);
    
    [self.lableContent mas_updateConstraints:^(MASConstraintMaker *make) {
        make.height.offset(size.height);
    }];
    //必须调用此方法,才能出动画效果
    [self.view layoutIfNeeded];
    
    NSMutableAttributedString *attributedStrContent = [[NSMutableAttributedString alloc]initWithString:self.lableContent.text];
    NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    paragraphStyle.lineSpacing = kLineSpacing;
    [attributedStrContent addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [attributedStrContent length])];
    [self addAttributeColorOfSubString:keyWord inString:content tatgetString:attributedStrContent];
    self.lableContent.attributedText = attributedStrContent;
}

/** 在指定字符串的颜色属性 */
- (void)addAttributeColorOfSubString:(NSString*)subStr inString:(NSString*)content tatgetString:(NSMutableAttributedString*)attributedString {
    NSString*string1 = [content stringByAppendingString:subStr];
    NSString *temp;
    bool iscnChar = NO;
    int cnIndex = 0;
    for(int i =0; i < content.length; i++) {
        temp = [string1 substringWithRange:NSMakeRange(i, subStr.length)];
        if ([temp isEqualToString:subStr]) {
            NSRange range = {i,subStr.length};
            [attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:range];
            [attributedString addAttribute:NSFontAttributeName value:kFont range:range];
        }
        
        unichar c = [string1 characterAtIndex:i];
        if (c >=0x4E00 && c <=0x9FA5){
            cnIndex = i;
            iscnChar = YES;
            NSRange range = {i, 1};
            [attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:range];
        }
    }
}

- (CGSize)adaptContentStringSizeWithFont:(UIFont*)font withWidth:(CGFloat)width content:(NSString *)content
{
    //行间距
    NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    paragraphStyle.lineSpacing = kLineSpacing;
    
    NSDictionary *attributes = @{
                                 NSFontAttributeName:font,
                                 NSParagraphStyleAttributeName:paragraphStyle
                                 };
    CGSize contentSize = [content boundingRectWithSize:CGSizeMake(width, MAXFLOAT)
                                               options:NSStringDrawingUsesLineFragmentOrigin
                                            attributes:attributes
                                               context:nil].size;
    return contentSize;
}

//取消键盘
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    [self.textView resignFirstResponder];
    [self.textField resignFirstResponder];
    [self.lableContent resignFirstResponder];
}