Ios -使用UITraitCollection变体时,[UITextView setAttributedText:]停止工作

Ios -使用UITraitCollection变体时,[UITextView setAttributedText:]停止工作,ios,xcode,uitextview,traits,nsattributedstring,Ios,Xcode,Uitextview,Traits,Nsattributedstring,我有一个UITextView设置来显示不同的属性字符串,具体取决于所使用的设备。但一旦我使用traits,setText:就不再有效了 我也不知道这两个文本的信息存储在哪里。 当我看故事板时,我看到: <textView> <attributedString key="attributedText"> <fragment content="Large"> <attributes>

我有一个UITextView设置来显示不同的属性字符串,具体取决于所使用的设备。但一旦我使用traits,setText:就不再有效了

我也不知道这两个文本的信息存储在哪里。 当我看故事板时,我看到:

<textView>
    <attributedString key="attributedText">
        <fragment content="Large">
            <attributes>
                <font key="NSFont" metaFont="system" size="14"/>
                <paragraphStyle key="NSParagraphStyle" alignment="natural" lineBreakMode="wordWrapping" baseWritingDirection="natural" tighteningFactorForTruncation="0.0"/>
            </attributes>
        </fragment>
    </attributedString>
    <variation key="heightClass=regular-widthClass=compact">
        <attributedString key="attributedText">
            <fragment content="Compact">
                <attributes>
                    <font key="NSFont" size="12" name=".AppleSystemUIFont"/>
                    <paragraphStyle key="NSParagraphStyle" alignment="natural" lineBreakMode="wordWrapping" baseWritingDirection="natural" tighteningFactorForTruncation="0.0"/>
                </attributes>
            </fragment>
        </attributedString>
    </variation>
</textView>
}

使用
-setAttributeText:
没有任何区别


您应该使用的方法应该是以下方法的变体:

    self.textView.attributedText = [[NSAttributedString alloc]
                                initWithString:@“xx”
                                attributes:@{}];

我认为,问题可能是,在viewDidLoad()中更改文本为时过早。我猜在应用尺寸类别/变化后的某个时间点,这些更改会被覆盖


我可以通过更改viewDidLayoutSubviews()中的文本而不是viewDidLoad()来解决这个问题。

您所说的“使用在
UITraitCollection
compact上选择的不同文本”是什么意思检查self.traitCollection.horizontalSizeClass==UIUserInterfaceSizeClassCompact,然后设置文本?如果是,您可能应该显示与此相关的代码,因为这就是问题所在。在屏幕截图中,它显示了我如何在Xcode中的故事板的上部UITextView中设置两个不同的文本。下面是我使用的示例项目:,也许这会让事情更清楚。如果要在代码中设置文本,为什么要为不同大小的类指定不同的文本?这是一个简化的示例,只是说明
-setText:
在这些情况下不起作用。在现实生活中,我会设置两个不同的属性字符串。谢谢,但正如我在问题中所写的:
使用-setAttributedText:没有任何区别。
    self.textView.attributedText = [[NSAttributedString alloc]
                                initWithString:@“xx”
                                attributes:@{}];