• 类似备忘录的文本 -- 设置行高和每一行的下划线


    #import "EHTextView.h"
    
    @implementation EHTextView
    
    - (instancetype)initWithFrame:(CGRect)frame
                          andText:(NSString *)mText
    {
        self = [super initWithFrame:frame];
    
        if (self)
        {
            NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    
            // 行间距
            paragraphStyle.lineHeightMultiple = 40;
            paragraphStyle.maximumLineHeight = 40;
            paragraphStyle.minimumLineHeight = 40;
            self.textContainerInset = UIEdgeInsetsMake(-10, 0, 0, 0);
            NSString *oneRowStr = [mText substringWithRange:NSMakeRange(0, [mText rangeOfString:@"
    "].location)];
            NSMutableAttributedString *prefixAttr = [[NSMutableAttributedString alloc] initWithString:mText];
            [prefixAttr addAttribute:NSFontAttributeName value:FZHei(17) range:NSMakeRange(0, mText.length)];
            [prefixAttr addAttribute:NSForegroundColorAttributeName value:ColorHui range:NSMakeRange(0, mText.length)];
            [prefixAttr addAttribute:NSFontAttributeName value:FZHei(17) range:NSMakeRange(0, oneRowStr.length)];
            [prefixAttr addAttribute:NSForegroundColorAttributeName value:ColorHuiHei range:NSMakeRange(0, oneRowStr.length)];
            [prefixAttr addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, mText.length)];
            self.attributedText = prefixAttr;
    
            self.backgroundColor = [UIColor clearColor];
            self.userInteractionEnabled = NO;
        }
    
        return self;
    }
    
     
    - (void)drawRect:(CGRect)rect {
        CGContextRef context = UIGraphicsGetCurrentContext();
        CGContextSetStrokeColorWithColor(context, HexRGB(0xd2d2d2).CGColor);
        CGContextSetLineWidth(context, 0.5f);
        CGContextBeginPath(context);
        CGFloat rowH = 40;
        NSUInteger numberOfLines =  (self.bounds.size.height - 15) / rowH;
        CGFloat baselineOffset = 0;
        for (int x = 1; x < numberOfLines + 1; x++) {
            CGContextSetStrokeColorWithColor(context, [UIColor lightGrayColor].CGColor);
            CGFloat lengthstest[] = {5,2};
            CGContextSetLineDash(context, 2, lengthstest,1);
            CGContextMoveToPoint(context, 2, rowH * x  + baselineOffset);
            CGFloat rowW = numberOfLines == x ? 35 : 0;
            CGContextAddLineToPoint(context, CGRectGetWidth(rect) - rowW, rowH * x + baselineOffset);
            CGContextStrokePath(context);
        }
    
        CGContextStrokePath(context);
    }
    @end
  • 相关阅读:
    开始学习C#
    关于串口数据读取的几个问题
    Joel测试
    VC查找内存泄漏技巧【转】
    思考题一
    自我介绍
    2020面向对象程序设计寒假作业1 题解
    思考题二
    题解 洛谷P2158 【[SDOI2008]仪仗队】
    深入浅出InfoPath系列
  • 原文地址:https://www.cnblogs.com/Milo-CTO/p/4633122.html
Copyright © 2020-2023  润新知