swift 获取一段文本每行所展示的文本 ios

给定字体大小,文本和最大宽度,调用后获取每行要展示的文本数组

func getTextLines(text:String,font:UIFont,maxWidth:CGFloat) -> [String] {
   
    let labelText = text
    
    // 构建属性字符串
    let attributedString = NSAttributedString(string: labelText, attributes: [NSAttributedString.Key.font: font])

    // 创建绘制区域
    let rect = CGRect(origin: .zero, size: CGSize(width: maxWidth, height: CGFloat.greatestFiniteMagnitude))

    // 创建CTFramesetter
    let framesetter = CTFramesetterCreateWithAttributedString(attributedString as CFAttributedString)

    // 创建CTFrame
    let path = CGPath(rect: rect, transform: nil)
    let frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), path, nil)

    // 获取CTLine数组
    let lines = CTFrameGetLines(frame) as! [CTLine]

    // 转换每个CTLine到String
    var lineTexts: [String] = []
    lines.forEach { (line) in
        let lineRange = CTLineGetStringRange(line)
        let range = NSRange(location: lineRange.location, length: lineRange.length)
        let lineString = (labelText as NSString).substring(with: range)
        lineTexts.append(lineString)
    }

    return lineTexts
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值