UISlider具有增加的滑块大小,但在iOS App中没有拇指变形

LCJ*_*LCJ 0 xamarin.ios xamarin xamarin.forms

我需要增加滑块的尺寸在iOS app使用创建的Xamarin Forms。我尝试使用以下重写的自定义渲染器LayoutSubviews。它增加了尺寸,但是拇指的尺寸却无法接受。如何减小拇指的大小,同时保持滑块的高度增加?

在Android中可能如下所示: 在不影响Android App中拇指的情况下增加滑块的高度

iOS参考:

  1. 自定义UISlider-增加“热点”大小

  2. 在UISlider中增加拇指的“单击区域”

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;            
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

更新-参考-渲染器

  1. 在Xamarin.Forms中自定义控件渲染

  2. 实施视图-渲染特定于平台的视图

  3. 适用于Xamarin和Xamarin.Forms的iOS范围滑块

  4. Xamarin.Forms的全屏视频背景控件

Col*_*SFT 6

覆盖TrackRectForBounds更改其高度,而不是更改transform

在MySliderRenderer中

class MySliderRenderer : SliderRenderer
{
    protected override void OnElementChanged(ElementChangedEventArgs<Slider> e)
    {
        SetNativeControl(new MySlideriOS());
        base.OnElementChanged(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

创建UISlider的子类

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的测试

在此处输入图片说明

这是样品