美文网首页
UITableView的cell中需要显示的文字非常长的问题

UITableView的cell中需要显示的文字非常长的问题

作者: FT__ | 来源:发表于2018-07-04 16:36 被阅读20次

    遇到的问题

    在一个自适应高度的自定义cell中,使用了多行UILabel,造成了TableView滑动掉帧。
    

    解决办法:CoreText替代UI控件进行绘制,还能处理图文混排

     - (void)drawRect:(CGRect)rect
    {
        [super drawRect:rect];
        
        // 获取当前上下文
        CGContextRef context = UIGraphicsGetCurrentContext();
        
        // 翻转坐标系
        CGContextSetTextMatrix(context, CGAffineTransformIdentity);
        CGContextTranslateCTM(context, 0, self.bounds.size.height);
        CGContextScaleCTM(context, 1.0, -1.0);
        
        // 绘制路径
        CGMutablePathRef path = CGPathCreateMutable();
        CGPathAddRect(path, NULL, self.bounds);
        
        // 创建绘制的字符串和CTFrame
        NSMutableAttributedString *attString = [[NSMutableAttributedString alloc] initWithString:self.text];
        NSDictionary *attributes = @{NSFontAttributeName:self.font, NSForegroundColorAttributeName:self.textColor};
        [attString addAttributes:attributes range:NSMakeRange(0, attString.length)];
        
        CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attString);
        CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, [attString length]), path, NULL);
        
        // 绘制
        CTFrameDraw(frame, context);
        
        // 释放内存
        CFRelease(frame);
        CFRelease(path);
        CFRelease(framesetter);
    }
    
    

    参考链接链接

    # iOS:基于CoreText的排版引擎

    相关文章

      网友评论

          本文标题:UITableView的cell中需要显示的文字非常长的问题

          本文链接:https://www.haomeiwen.com/subject/trzeuftx.html