博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS使用核心文本将字符串切割为字符串数组
阅读量:5832 次
发布时间:2019-06-18

本文共 2677 字,大约阅读时间需要 8 分钟。

前言

开发中某些情况下,会遇到一些特殊要求,比如需要将一段文本按照固定宽度分割成字符串数组,这里提供一段使用核心文本切割字符串的方法。

Swift代码

import UIKitextension String {    ///根据字体和宽度切割字符串    func separatedLines(with font: UIFont, width: CGFloat) -> [String] {        let attributedString = NSMutableAttributedString(string: self)        attributedString.addAttribute(NSAttributedString.Key(kCTFontAttributeName as String), value: CTFontCreateWithName((font.fontName) as CFString, font.pointSize, nil), range: NSRange(location: 0, length: attributedString.length))        let frameSetter = CTFramesetterCreateWithAttributedString(attributedString)        let path = CGMutablePath()        path.addRect(CGRect(x: 0, y: 0, width: width, height: 100000), transform: .identity)        let frame = CTFramesetterCreateFrame(frameSetter, CFRangeMake(0, 0), path, nil)        let lines = CTFrameGetLines(frame)        var linesArray: [String] = []        for line in (lines as Array) {            let lineRef = line as! CTLine            let lineRange: CFRange = CTLineGetStringRange(lineRef)            let range = NSRange(location: lineRange.location, length: lineRange.length)            let lineString = (self as NSString).substring(with: range)            linesArray.append(lineString)        }        return linesArray    }}复制代码

OC代码

#import 
#import "NSString+Separated.h"#import
@implementation NSString (Separated)/** 根据字体和每一行宽度切割字符串 @param font 字体 @param width 宽度 @return 切割后字符串数组 */- (NSArray *)separatedLinesWithFont:(UIFont *)font width:(CGFloat)width { NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:self]; [attributedString addAttribute:(NSString *)kCTFontAttributeName value:(__bridge id)CTFontCreateWithName((__bridge CFStringRef)([font fontName]), [font pointSize], NULL) range:NSMakeRange(0, attributedString.length)]; CTFramesetterRef frameSetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)attributedString); CGMutablePathRef path = CGPathCreateMutable(); CGPathAddRect(path, NULL, CGRectMake(0, 0, width, 100000)); CTFrameRef frame = CTFramesetterCreateFrame(frameSetter, CFRangeMake(0, 0), path, NULL); NSArray *lines = (__bridge NSArray *)CTFrameGetLines(frame); NSMutableArray *linesArray = [[NSMutableArray alloc]init]; for (id line in lines) { CTLineRef lineRef = (__bridge CTLineRef )line; CFRange lineRange = CTLineGetStringRange(lineRef); NSRange range = NSMakeRange(lineRange.location, lineRange.length); NSString *lineString = [self substringWithRange:range]; [linesArray addObject:lineString]; } return (NSArray *)linesArray;}@end复制代码

切割效果

转载地址:http://mdrdx.baihongyu.com/

你可能感兴趣的文章
Apache Spark 章节1
查看>>
phpcms与discuz的ucenter整合
查看>>
Linux crontab定时执行任务
查看>>
mysql root密码重置
查看>>
33蛇形填数
查看>>
选择排序
查看>>
SQL Server 数据库的数据和日志空间信息
查看>>
前端基础之JavaScript
查看>>
自己动手做个智能小车(6)
查看>>
自己遇到的,曾未知道的知识点
查看>>
P1382 楼房 set用法小结
查看>>
分类器性能度量
查看>>
windows 环境下切换 python2 与 pythone3 以及常用命令
查看>>
docker 基础
查看>>
解决灾难恢复后域共享目录SYSVOL与NELOGON共享丢失
查看>>
Lync 客户端单独安装激活步骤
查看>>
eclipse集成weblogic开发环境的搭建
查看>>
写一个bat文件,删除文件名符合特定规则,且更改日期在某
查看>>
【jc2-1】 网络层IP编址
查看>>
我的友情链接
查看>>