NSAttributedString写入方向

6

我想改变NSAttributedString中的书写方向,但是我很难弄清楚如何做到这一点。

CTFontRef fontRef = CTFontCreateWithName((CFStringRef)@"ArialRoundedMTBold", 16, NULL);

NSDictionary *attrDictionary = [NSDictionary dictionaryWithObjectsAndKeys:(__bridge id)fontRef,(NSString *)kCTFontAttributeName, nil];
CFRelease(fontRef);

NSAttributedString *attString=[[NSAttributedString alloc] initWithString:self.stringMap attributes:attrDictionary];

self.attString = attString;

这是我初始化NSAttributedString的代码,我了解常量kCTWritingDirectionRightToLeft,感觉需要把它放在某个地方,但我不知道具体在哪里和如何使用。
有人有什么建议吗?

请查看此处的 NSWritingDirectionAttributeName:https://developer.apple.com/library/ios/documentation/uikit/reference/NSAttributedString_UIKit_Additions/Reference/Reference.html - Larme
是的,我之前已经查看过了,一切都很好,但是我该如何利用它呢?我总觉得苹果的文档缺乏示例。 - sqdejan
我的猜测(没有尝试):关键字:NSWritingDirectionAttributeName,对象:@(1) - Larme
无法使其工作:S在代码中查看,它说“值必须是CFNumberRefs的CFArray”-这是否对应于CFArray:@(kCTWritingDirectionLeftToRight | kCTTextWritingDirectionEmbedding)? - sqdejan
你写了什么?我会写成:NSDictionary *attrDictionary = [NSDictionary dictionaryWithObjectsAndKeys:(__bridge id)fontRef,(NSString *)kCTFontAttributeName, @(1), NSWritingDirectionAttributeName]; - Larme
是的,我也试过了。它没有报错,但也没有改变任何东西。我还尝试了以下代码:NSDictionary *attrDictionary = [NSDictionary dictionaryWithObjectsAndKeys:(__bridge id)fontRef,(NSString *)kCTFontAttributeName, @(kCTWritingDirectionRightToLeft | kCTWritingDirectionOverride),kCTWritingDirectionAttributeName,nil]; - 但没有成功。 - sqdejan
1个回答

8

我仔细阅读了文档。

我会使用NSFontAttributeNameNSWritingDirectionAttributeName,因为我比起使用所有的bridge东西更加熟悉它们,同时也更喜欢简写语法。

所以NSWritingDirectionAttributeName需要一个NSArrayNSNumbers。这就是问题所在。其中一个数字必须是NSWritingDirection从左至右从右至左),另一个数字必须是NSTextWritingDirection嵌入覆盖)。

因此,可能的组合有以下几种(我认为你正在寻找第四种):

NSDictionary *attrDictionary = @{NSFontAttributeName:font,
                                 NSWritingDirectionAttributeName:@[@(NSWritingDirectionRightToLeft | NSTextWritingDirectionOverride)]};

NSDictionary *attrDictionary = @{NSFontAttributeName:font,
                                 NSWritingDirectionAttributeName:@[@(NSWritingDirectionLeftToRight | NSTextWritingDirectionEmbedding)]};

NSDictionary *attrDictionary = @{NSFontAttributeName:font,
                                 NSWritingDirectionAttributeName:@[@(NSWritingDirectionLeftToRight | NSTextWritingDirectionOverride)]};

NSDictionary *attrDictionary = @{NSFontAttributeName:font,
                                 NSWritingDirectionAttributeName:@[@(NSWritingDirectionRightToLeft | NSTextWritingDirectionOverride)]};

来源:NSWritingDirectionAttributeName文档

这个属性用于指定文本的书写方向,以便在显示或排版时正确地呈现文本。可以设定从左到右(LTR)、从右到左(RTL)或双向(BIDI)等方向。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接