Xamarin iOS应用程序中的UISlider滑块尺寸增大,但没有拇指变形

Xamarin iOS应用程序中的UISlider滑块尺寸增大,但没有拇指变形,xamarin,xamarin.ios,xamarin.forms,Xamarin,Xamarin.ios,Xamarin.forms,我需要在使用Xamarin表单创建的iOS应用程序中增加滑块的大小。我尝试使用以下自定义呈现程序来覆盖布局子视图。它增加了尺寸,但拇指的尺寸增加不可接受。如何在保持滑块高度增加的情况下减小拇指的大小 这在Android中是可能的,如下所示: iOS参考资料: C#自定义渲染器 [assembly: ExportRenderer(typeof(MySlider), typeof(MySliderRenderer))] namespace CustomRenderer.iOS { cla

我需要在使用
Xamarin表单创建的
iOS应用程序中增加滑块的大小。我尝试使用以下自定义呈现程序来覆盖
布局子视图
。它增加了尺寸,但拇指的尺寸增加不可接受。如何在保持滑块高度增加的情况下减小拇指的大小

这在Android中是可能的,如下所示:

iOS参考资料:

  • C#自定义渲染器

    [assembly: ExportRenderer(typeof(MySlider), typeof(MySliderRenderer))]
    namespace CustomRenderer.iOS
    {
        class MySliderRenderer : Xamarin.Forms.Platform.iOS.SliderRenderer
        {
            protected override void OnElementChanged(ElementChangedEventArgs<Slider> e)
            {
                base.OnElementChanged(e);   
                Control.MinimumTrackTintColor = UIColor.FromRGB(0xE6, 0x00, 0x06);
                Control.ThumbTintColor = UIColor.Red;
                Control.MinimumTrackTintColor = UIColor.Orange;
                Control.MaximumTrackTintColor = UIColor.Yellow;
                //Control.SetThumbImage(UIImage.FromFile("myicon.png"), UIControlState.Normal);
            }
    
            public override void LayoutSubviews()
            {
                base.LayoutSubviews();
                CGAffineTransform transform = CGAffineTransform.MakeScale(1f, 12.0f);
                transform.TransformSize(this.Frame.Size);
                this.Control.Transform = transform;            
            }
        }
    }
    
    public class MySlideriOS : UISlider
    {
        public MySlideriOS() {
            this.MinimumTrackTintColor = UIColor.FromRGB(0xE6, 0x00, 0x06);
            this.ThumbTintColor = UIColor.Red;
            this.MinimumTrackTintColor = UIColor.Orange;
            this.MaximumTrackTintColor = UIColor.Yellow;
        }
    
        public override CGRect TrackRectForBounds(CGRect forBounds)
        {
            CGRect rect =  base.TrackRectForBounds(forBounds);
            return new CGRect(rect.X, rect.Y, rect.Width, 20);
        }
    }
    
    [程序集:导出渲染器(typeof(MySlider)、typeof(mysliderrender))]
    命名空间CustomRenderer.iOS
    {
    类mysliderrender:Xamarin.Forms.Platform.iOS.sliderrender
    {
    受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
    {
    基础。一个要素发生变化(e);
    Control.MinimumTrackTintColor=UIColor.FromRGB(0xE6、0x00、0x06);
    Control.ThumbTintColor=UIColor.Red;
    Control.MinimumTrackTintColor=UIColor.Orange;
    Control.MaximumTrackTintColor=UIColor.Yellow;
    //Control.SetThumbImage(UIImage.FromFile(“myicon.png”)、UIControlState.Normal);
    }
    公共覆盖无效布局子视图()
    {
    base.LayoutSubviews();
    CGAffineTransform transform=CGAffineTransform.MakeScale(1f,12.0f);
    transform.TransformSize(this.Frame.Size);
    this.Control.Transform=转换;
    }
    }
    }
    

    更新-引用-渲染器

    [assembly: ExportRenderer(typeof(MySlider), typeof(MySliderRenderer))]
    namespace CustomRenderer.iOS
    {
        class MySliderRenderer : Xamarin.Forms.Platform.iOS.SliderRenderer
        {
            protected override void OnElementChanged(ElementChangedEventArgs<Slider> e)
            {
                base.OnElementChanged(e);   
                Control.MinimumTrackTintColor = UIColor.FromRGB(0xE6, 0x00, 0x06);
                Control.ThumbTintColor = UIColor.Red;
                Control.MinimumTrackTintColor = UIColor.Orange;
                Control.MaximumTrackTintColor = UIColor.Yellow;
                //Control.SetThumbImage(UIImage.FromFile("myicon.png"), UIControlState.Normal);
            }
    
            public override void LayoutSubviews()
            {
                base.LayoutSubviews();
                CGAffineTransform transform = CGAffineTransform.MakeScale(1f, 12.0f);
                transform.TransformSize(this.Frame.Size);
                this.Control.Transform = transform;            
            }
        }
    }
    
    public class MySlideriOS : UISlider
    {
        public MySlideriOS() {
            this.MinimumTrackTintColor = UIColor.FromRGB(0xE6, 0x00, 0x06);
            this.ThumbTintColor = UIColor.Red;
            this.MinimumTrackTintColor = UIColor.Orange;
            this.MaximumTrackTintColor = UIColor.Yellow;
        }
    
        public override CGRect TrackRectForBounds(CGRect forBounds)
        {
            CGRect rect =  base.TrackRectForBounds(forBounds);
            return new CGRect(rect.X, rect.Y, rect.Width, 20);
        }
    }
    

  • 重写
    TrackRectForBounds
    以更改其高度,而不是更改
    transform

    在mysliderrender中

    class MySliderRenderer : SliderRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Slider> e)
        {
            SetNativeControl(new MySlideriOS());
            base.OnElementChanged(e);
        }
    }
    
    我的测试


    这里是

    覆盖
    TrackRectForBounds
    以更改其高度,而不是更改
    变换

    在mysliderrender中

    class MySliderRenderer : SliderRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Slider> e)
        {
            SetNativeControl(new MySlideriOS());
            base.OnElementChanged(e);
        }
    }
    
    我的测试


    这里是

    进行此更改后,滑块未渲染。我正在Mac上测试它。你能告诉我你是怎么测试的吗?另外,你有这个项目的工作示例吗?@Lijo好的,给我一些时间准备,我会在8小时内提供链接。@Lijo你是使用vs for mac还是windows?我正在windows中使用vs运行该项目。它使用Xamarin mac Agent连接到mac。我正在Mac中验证结果。@Lijo OK得到了。做了这个更改后,滑块没有渲染。我正在Mac上测试它。你能告诉我你是怎么测试的吗?另外,你有这个项目的工作示例吗?@Lijo好的,给我一些时间准备,我会在8小时内提供链接。@Lijo你是使用vs for mac还是windows?我正在windows中使用vs运行该项目。它使用Xamarin mac Agent连接到mac。我正在Mac中验证结果。@Lijo OK收到了。