首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS连字符与TextKit和对齐文本

iOS连字符与TextKit和对齐文本
EN

Stack Overflow用户
提问于 2020-06-01 22:18:06
回答 1查看 552关注 0票数 5

大家好。我在使用带有文本视图的TextKit显示连字符对齐文本时遇到了问题。我尝试通过段落样式和NSLayoutManager来进行连字符,但是没有预期的结果。段落样式示例:

代码语言:javascript
复制
let paragraph = NSMutableParagraphStyle()
paragraph.alignment = .justified
paragraph.lineBreakMode = .byWordWrapping
paragraph.hyphenationFactor = 0.85 //here goes the black magic :)

问题是,没有连字符的正确文本看起来很糟糕,因为它扩展了字母之间的间隔(而不是单词)。如果连字符有效的话,一切看起来都很好。但这里还有另一个问题--用当前手机首选语言的规则将连字符应用于文本。这意味着,如果手机的首选语言是英语,而文本是西里尔语(例如。俄罗斯语或乌克兰语),连字符都不使用,拉伸的文本也会出现问题。下面是这个问题的样子:

更改电话首选语言而不是文本语言会使本机连字符工作得很好,并且正确地呈现对齐文本:

因此,我的解决方案是使用NaturalLanguage框架确定文本语言和更改应用程序首选语言。为了确定文本语言,我使用以下代码片段:

代码语言:javascript
复制
import NaturalLanguage

extension String {
    func dominantLanguage() -> Locale? {
        let languageRecognizer = NLLanguageRecognizer()
        languageRecognizer.processString(self)

        if let code = languageRecognizer.dominantLanguage?.rawValue {
            let language = Locale.init(identifier: code)
            return language
        } else if let code = languageRecognizer.languageHypotheses(withMaximum: 3).sorted(by: { (arg0, arg1) -> Bool in
            return arg0.value > arg1.value
            }).first?.key.rawValue {
            let language = Locale.init(identifier: code)
            return language
        } else {
            return nil
        }
    }
}

let locale = "qwerty".dominantLanguage()

但是这个解决方案有不同的问题: 1)它不能100%正确地工作。例如,如果文本以表开头(如上面的截图所示),languageRecognizer.dominantLanguage返回零,而languageHyphoteses可能返回错误的区域设置。我一点也不相信这一点。2)每次更改应用程序的首选语言都是一种黑客行为。

我需要找到很好的解决方案来解决这个问题,我想确保在不同的边缘情况下没有刹车。而且,我发现CoreText不适合我的其他目的,而且我发现TextKit会对我很好,但是我有这个问题,我不知道如何正确地解决它。

另外,我发现使用WebView和CSS -webkit-连字符可以很容易地完成连字符(使用任何文本语言)和正确的文本,但我真的不想像使用CoreText那样深入使用WebView (不适合我的其他应用程序)。有没有人知道如何使用TextKit实现这一结果?我正在寻找固着的解决方案。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-06-08 08:47:30

使用UITextView而不是UILabel是如何使此工作正常的方法。

hyphenationFactor (作为NSParagraphStyle属性或NSLayoutManager属性)应该按照预期工作。- https://stackoverflow.com/a/19766990/6570914

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62141858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档