【问题标题】:Custom switch does not show On/Off Image in Xamarin Forms自定义开关不会在 Xamarin 表单中显示开/关图像
【发布时间】:2020-06-15 22:10:00
【问题描述】:

https://www.c-sharpcorner.com/article/how-to-create-and-use-a-custom-switch-control-in-xamarin-forms/

当我按照上面的指南制作自定义渲染器时,“OnImage”和“OffImage”不起作用。当我点击或关闭时,我看不到图像。

在我的课堂上,我发送了一个 HTTP url,然后将该 URL 转换为 UIImage。它成功运行,因为我一直添加断点。我什至尝试在我的图书馆中使用一张图片,看看这是否会改变结果,但它没有。

public class Switch_iOS : SwitchRenderer
{
    Version version = new Version(ObjCRuntime.Constants.Version);
    protected override void OnElementChanged(ElementChangedEventArgs<Switch> e)
    {
        base.OnElementChanged(e);
        if (e.OldElement != null || e.NewElement == null)
            return;
        var view = (CustomSwitch)Element;
        if (!string.IsNullOrEmpty(view.SwitchThumbImage))
        {
            if (version > new Version(6, 0))
            {   
                Control.OnImage = FromUrl(view.SwitchThumbImage);

                Control.OffImage = FromUrl(view.SwitchThumbImage);
            }
            else
            {
                Control.ThumbTintColor = view.SwitchThumbColor.ToUIColor();
            }
        }
    }

    public UIImage FromUrl(string uri)
    {
        using (var url = new NSUrl(uri))
        using (var data = NSData.FromUrl(url))
            return UIImage.LoadFromData(data);
    }
}

“Control.OnImage”和“Control.OffImage”是否不适用于最新的 Xamarin 表单?我还打算为开关制作背景图片。

【问题讨论】:

  • “似乎不起作用”不是对问题的有用描述。你是说两个图像都不显示吗?还是只有一个可以?还是别的什么?
  • 不起作用..我会改写问题。

标签: xamarin xamarin.forms xamarin.ios


【解决方案1】:

很遗憾,关于UISwitchOnImageOffImage从iOS 7开始没有效果。

看看the apple document

在 iOS 7 及更高版本中,此属性无效。

在 iOS 6 中,此图像表示开关的内部内容。 您指定的图像与开关的圆形边框合成 和拇指来创建最终外观。

你可以使用

  • onTintColor 设置开关打开时的色调颜色。
  • tintColor 设置开关关闭时的色调颜色。
  • thumbTintColor 设置拇指的色调。

【讨论】:

  • 哎呀,所以不可能添加图像? :( 你知道 xamarin 形式的任何工作吗?试图做到这一点:syncfusion.com/blogs/wp-content/uploads/2019/06/image.gif
  • @DiddanDo 是的。据我所知,除非自定义一个视图来实现UISwitch的所有功能,否则无法在UISwitch上添加图片。
  • 好的。你知道在 xamarin 中做过自定义的任何 github 存储库吗?
  • @DiddanDo Syncfusion.Xamarin.Core nuget 包可以通过使用 SfSwitch 来实现。参考here
  • 是的,这正是我所需要的。但是合成太贵了
猜你喜欢
  • 2013-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多