使用 AddAttribute 的下划线和删除线未正确更新
Underline and Strikethrough using AddAttribute not updating properly
我正在 iOS 上制作自定义渲染器以获得 UILabel 的下划线和删除线。
使用
var stringAttributes = new NSMutableAttributedString(Control.Text,new UIStringAttributes{ UnderlineStyle = NSUnderlineStyle.Thick, UnderlineColor = UIColor.Black, BackgroundColor = UIColor.Brown});
工作完美。
但使用 AddAttribute 不更新 UiLabel
{
var stringAttributes = new NSMutableAttributedString(Control.AttributedText);
if (OutField.FontAttr.CrossedOut)
{
stringAttributes.AddAttribute(new NSString("UnderlineStyle"),
NSNumber.FromInt32((int)NSUnderlineStyle.Thick),
new NSRange(0, Element.Text.Length));
stringAttributes.AddAttribute(new NSString("UnderlineColor"),
Control.TextColor,
new NSRange(0, Element.Text.Length));
}
if (OutField.FontAttr.Underlined)
{
stringAttributes.AddAttribute(new NSString("UnderlineStyle"),
NSNumber.FromInt32((int)NSUnderlineStyle.Single),
new NSRange(0, Element.Text.Length));
stringAttributes.AddAttribute(new NSString("UnderlineColor"),
Control.TextColor,
new NSRange(0, Element.Text.Length));
}
Control.AttributedText = stringAttributes;
}
我试着用不同的方式做同样的事情,但没有任何运气
每次我更改选项时都只使用新的 NSMutableAttributedString 对象
NSMutableAttributedString stringAttributes = null;
if (OutField.FontAttr.CrossedOut && OutField.FontAttr.Underlined)
{
stringAttributes = new NSMutableAttributedString(Control.Text, new UIStringAttributes
{
UnderlineStyle = NSUnderlineStyle.Single,
UnderlineColor = Control.TextColor,
StrikethroughStyle = NSUnderlineStyle.Single,
StrikethroughColor = Control.TextColor
});
}
else if (OutField.FontAttr.Underlined)
{
stringAttributes = new NSMutableAttributedString(Control.Text, new UIStringAttributes
{
UnderlineStyle = NSUnderlineStyle.Single,
UnderlineColor = Control.TextColor,
StrikethroughStyle = NSUnderlineStyle.Single,
StrikethroughColor = Control.TextColor
});
}
else if (OutField.FontAttr.CrossedOut)
{
stringAttributes = new NSMutableAttributedString(Control.Text, new UIStringAttributes
{
UnderlineStyle = NSUnderlineStyle.Single,
UnderlineColor = Control.TextColor,
StrikethroughStyle = NSUnderlineStyle.Single,
StrikethroughColor = Control.TextColor
});
}
if (stringAttributes != null)
{
Control.AttributedText = stringAttributes;
}
答案实际上是一种解决方法
在 Xamarin.ios NSUnderlineStyle.Single
中不起作用我用 NSUnderlineStyle.Think
代替。
stringAttributes.AddAttribute()
无法让它正常工作,所以我坚持使用 Control.AttributedText = stringAttributes.
我明白了,但是如果我使用多行文本,删除线不起作用,并且
显然这是 iOS 中的一个已知问题:https://github.com/lionheart/openradar-mirror/issues/17165
这是 xamarin 的解决方法
http://www.openradar.me/31174934
我正在 iOS 上制作自定义渲染器以获得 UILabel 的下划线和删除线。 使用
var stringAttributes = new NSMutableAttributedString(Control.Text,new UIStringAttributes{ UnderlineStyle = NSUnderlineStyle.Thick, UnderlineColor = UIColor.Black, BackgroundColor = UIColor.Brown});
工作完美。
但使用 AddAttribute 不更新 UiLabel
{
var stringAttributes = new NSMutableAttributedString(Control.AttributedText);
if (OutField.FontAttr.CrossedOut)
{
stringAttributes.AddAttribute(new NSString("UnderlineStyle"),
NSNumber.FromInt32((int)NSUnderlineStyle.Thick),
new NSRange(0, Element.Text.Length));
stringAttributes.AddAttribute(new NSString("UnderlineColor"),
Control.TextColor,
new NSRange(0, Element.Text.Length));
}
if (OutField.FontAttr.Underlined)
{
stringAttributes.AddAttribute(new NSString("UnderlineStyle"),
NSNumber.FromInt32((int)NSUnderlineStyle.Single),
new NSRange(0, Element.Text.Length));
stringAttributes.AddAttribute(new NSString("UnderlineColor"),
Control.TextColor,
new NSRange(0, Element.Text.Length));
}
Control.AttributedText = stringAttributes;
}
我试着用不同的方式做同样的事情,但没有任何运气 每次我更改选项时都只使用新的 NSMutableAttributedString 对象
NSMutableAttributedString stringAttributes = null;
if (OutField.FontAttr.CrossedOut && OutField.FontAttr.Underlined)
{
stringAttributes = new NSMutableAttributedString(Control.Text, new UIStringAttributes
{
UnderlineStyle = NSUnderlineStyle.Single,
UnderlineColor = Control.TextColor,
StrikethroughStyle = NSUnderlineStyle.Single,
StrikethroughColor = Control.TextColor
});
}
else if (OutField.FontAttr.Underlined)
{
stringAttributes = new NSMutableAttributedString(Control.Text, new UIStringAttributes
{
UnderlineStyle = NSUnderlineStyle.Single,
UnderlineColor = Control.TextColor,
StrikethroughStyle = NSUnderlineStyle.Single,
StrikethroughColor = Control.TextColor
});
}
else if (OutField.FontAttr.CrossedOut)
{
stringAttributes = new NSMutableAttributedString(Control.Text, new UIStringAttributes
{
UnderlineStyle = NSUnderlineStyle.Single,
UnderlineColor = Control.TextColor,
StrikethroughStyle = NSUnderlineStyle.Single,
StrikethroughColor = Control.TextColor
});
}
if (stringAttributes != null)
{
Control.AttributedText = stringAttributes;
}
答案实际上是一种解决方法
在 Xamarin.ios NSUnderlineStyle.Single
中不起作用我用 NSUnderlineStyle.Think
代替。
stringAttributes.AddAttribute()
无法让它正常工作,所以我坚持使用 Control.AttributedText = stringAttributes.
我明白了,但是如果我使用多行文本,删除线不起作用,并且 显然这是 iOS 中的一个已知问题:https://github.com/lionheart/openradar-mirror/issues/17165 这是 xamarin 的解决方法 http://www.openradar.me/31174934