gpt4 book ai didi

ios - 带有太长阿拉伯文本的 CoreText

转载 作者:行者123 更新时间:2023-12-03 09:24:51 26 4
gpt4 key购买 nike

我试图按照关于 CoreText 的教程以及如何绘制文本,并在我的 customView 中实现了这个功能。

override func draw(_ rect: CGRect) {         
guard let context = UIGraphicsGetCurrentContext() else { return }
let path = CGMutablePath()
path.addRect(bounds)
let attrString = NSAttributedString(string: "Hello World")
let framesetter = CTFramesetterCreateWithAttributedString(attrString as CFAttributedString)
let frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, attrString.length), path, nil)
CTFrameDraw(frame, context)
}
当文本很短时它工作正常,但当文本超过 10k 个字母时,它会以错误的方式呈现。有什么解决办法吗?
注意:当文本为阿拉伯语而不是英语时会发生这种情况。
这是文本很小时的渲染:
enter image description here
这是文本数量超过 10kb 时的文本渲染,
它看起来脱节和颠倒
:
enter image description here

最佳答案

根据 Apple 的反馈,当字符串长于特定大小时,CTFramesetter 似乎会关闭高级布局。 (他们认为这是因为混合方向文本听起来不正确;我肯定只用阿拉伯语复制了这个。)
要解决此问题,您需要使用始终执行高级布局的自定义排版器 (kCTTypesetterOptionAllowUnboundedLayout) 创建一个框架 setter 。幸运的是,这很简单。
首先创建一个自定义排版器,然后使用它来创建框架 setter :

let typesetterOptions = [kCTTypesetterOptionAllowUnboundedLayout: true] as CFDictionary
let typesetter = CTTypesetterCreateWithAttributedStringAndOptions(attrString,
typesetterOptions)!
let framesetter = CTFramesetterCreateWithTypesetter(typesetter)

关于ios - 带有太长阿拉伯文本的 CoreText,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65293503/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com