Ios -使用UITraitCollection变体时,[UITextView setAttributedText:]停止工作
我有一个UITextView设置来显示不同的属性字符串,具体取决于所使用的设备。但一旦我使用traits,setText:就不再有效了 我也不知道这两个文本的信息存储在哪里。 当我看故事板时,我看到: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>
<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:@{}];