iOS:NSMutableAttributedString.AddAttributes未呈现。(沙马林)

iOS:NSMutableAttributedString.AddAttributes未呈现。(沙马林),ios,objective-c,swift,xcode,xamarin.ios,Ios,Objective C,Swift,Xcode,Xamarin.ios,我正在尝试更改Xamarin.iOS中UILabel中链接的样式。 我编写了以下代码,并且正确更新了NSMutableAttributeString。 但是,不会渲染更新后的样式。 我错过什么了吗 我正在iOS模拟器上测试 mutableHtmlString.EnumerateAttribute(linkAttributeName,新NSRange(0,mutableHtmlString.Length)),NSAttributedStringEnumeration.LongestEffectiv

我正在尝试更改Xamarin.iOS中UILabel中链接的样式。 我编写了以下代码,并且正确更新了NSMutableAttributeString。 但是,不会渲染更新后的样式。 我错过什么了吗

我正在iOS模拟器上测试

mutableHtmlString.EnumerateAttribute(linkAttributeName,新NSRange(0,mutableHtmlString.Length)),NSAttributedStringEnumeration.LongestEffectiveRangeNotRequired,
(NSObject值、NSRange范围、参考布尔停止)=>
{
var attrHyperlink=新的UIStringAttributes属性
{
UnderlineStyle=NSUnderlineStyle.None,
ForegroundColor=UIColor.Red,
};
if(value!=null&&value为NSUrl url)
{
mutableHtmlString.AddAttributes(属性超链接,范围);
System.Diagnostics.Debug.WriteLine(@$“XXX:{mutableHtmlString});
}               
});
control.attributeText=mutableHtmlString;
NSUnderlineStyle.PatternDash已正确渲染。 也可进行字距调整和下划线颜色


这是UILabel的限制吗?

来自Apple:为了提高一致性,预期的行为适用于表示使用默认链接外观绘制的链接(通过NSLinkAttributeName指定)的范围。因此,当前行为是预期行为

这意味着这是一个UILabel限制,是有意的

然而,有一个解决办法。只需使用自定义属性替换NSLink

mutableHtmlString.EnumerateAttribute(linkAttributeName,新NSRange(0,mutableHtmlString.Length)),NSAttributedStringEnumeration.LongestEffectiveRangeNotRequired,
(NSObject值、NSRange范围、参考布尔停止)=>
{
var attrHyperlink=新的UIStringAttributes属性
{
UnderlineStyle=NSUnderlineStyle.None,
ForegroundColor=UIColor.Red,
};
if(value!=null&&value为NSUrl url)
{
mutableHtmlString.AddAttribute(customAttributeName、value、range);
可变HTMLSTRING.RemoveAttribute(“NSLink”,范围);
mutableHtmlString.AddAttributes(属性超链接,范围);
}               
});
control.attributeText=mutableHtmlString;
如果需要,您可以使用
customAttributeName
查找字符串


多亏了

我回答了一个类似的问题,看看这个@RicardoRomo抱歉,我使用的是UiLabel而不是UiTextView。我更新了问题。谢谢。您可以使用UITextView而不是UILabel,并将
UserInteractionEnabled
设置为false。@LucasZhang MSFT您好,它是标签的自定义呈现程序,因此我不能使用TextView(我想),而且我需要表单中的用户交互,您可以使用编辑器而不是标签。