ios - iOS:未呈现NSMutableAttributedString.AddAttributes。 (Xamarin)

标签 ios objective-c swift xcode xamarin.ios

我正在尝试更改Xamarin.iOS中UILabel中链接的样式。
我编写了以下代码,并且NSMutableAttributedString已正确更新。
但是,不会呈现更新的样式。
我想念什么吗?

我正在iOS模拟器上进行测试。

mutableHtmlString.EnumerateAttribute(linkAttributeName, new NSRange(0, mutableHtmlString.Length), NSAttributedStringEnumeration.LongestEffectiveRangeNotRequired,
    (NSObject value, NSRange range, ref bool stop) =>
    {
        var attrHyperlink = new UIStringAttributes
        {
            UnderlineStyle = NSUnderlineStyle.None,
            ForegroundColor = UIColor.Red,
        };

        if (value != null && value is NSUrl url)
        {
            mutableHtmlString.AddAttributes(attrHyperlink, range);
            System.Diagnostics.Debug.WriteLine(@$"XXX: {mutableHtmlString}");
        }               
    });
control.AttributedText = mutableHtmlString;

NSUnderlineStyle.PatternDash正确呈现。
还有KerningAdjustment和UnderlineColor。

这是UILabel的限制吗?

最佳答案

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

因此,这意味着它是UILabel的限制,而且是故意的。

但是,有一种解决方法。只需将NSLink替换为自定义属性即可。

mutableHtmlString.EnumerateAttribute(linkAttributeName, new NSRange(0, mutableHtmlString.Length), NSAttributedStringEnumeration.LongestEffectiveRangeNotRequired,
    (NSObject value, NSRange range, ref bool stop) =>
    {
        var attrHyperlink = new UIStringAttributes
        {
            UnderlineStyle = NSUnderlineStyle.None,
            ForegroundColor = UIColor.Red,
        };

        if (value != null && value is NSUrl url)
        {
            mutableHtmlString.AddAttribute(customAttributeName, value, range);
            mutableHtmlString.RemoveAttribute("NSLink", range);
            mutableHtmlString.AddAttributes(attrHyperlink, range);
        }               
    });
control.AttributedText = mutableHtmlString;

如果需要,您可以使用customAttributeName查找字符串。

感谢https://exceptionshub.com/color-attribute-is-ignored-in-nsattributedstring-with-nslinkattributename.html

关于ios - iOS:未呈现NSMutableAttributedString.AddAttributes。 (Xamarin),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60580055/

相关文章:

ios - 以编程方式在 UIButton 上设置图像和文本

ios - 我的网站无法在 iPhone 上滚动?

ios - 分组的 UITableView 的背景纹理不会随表格滚动

iphone - 检查是否在UIPinchGestureRecognizer中释放了捏

ios - 当作为 Objective-C block 调用时,Swift 闭包崩溃

xcode - RNCryptor:在 Swift 中解密 AES128CBC

ios - 我的 View 只有 320 像素,我在 iPhone 5 上看到分辨率很差的图像?

objective-c - 通过指针运算与 C 中的下标访问数组值

objective-c - 可以释放一个指针吗?

SwiftUI EaseIn Transition 通过多种颜色循环