UISlider 增加了滑块大小,但在 iOS 应用程序中没有拇指变形 [英] UISlider with increased slider size but no thumb distortion in iOS App

查看:22
本文介绍了UISlider 增加了滑块大小,但在 iOS 应用程序中没有拇指变形的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要在使用 Xamarin Forms 创建的 iOS 应用 中增加滑块的大小.我尝试使用以下自定义渲染器覆盖 LayoutSubviews.它增加了尺寸,但拇指的尺寸增加了不可接受的.如何在保持滑块高度增加的情况下减小拇指的大小?

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

更新 - 参考 - 渲染器

  1. 这是示例

    I need to increase size of slider in the iOS app created using Xamarin Forms. I tried with following custom renderer that overrides LayoutSubviews. It increases the size but there is an unacceptable size increase for the thumb. How to reduce the size of the thumb keeping the increased height of the slider?

    It is possible in Android as shown here: Increase height of slider without affecting thumb in Android App

    iOS References:

    1. Custom UISlider - Increase "hot spot" size

    2. Increasing a thumbs "click area" in UISlider

    C# Custom Renderer

    [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;            
            }
        }
    }
    

    UPDATE - REFERENCES - Renderer

    1. Customizing Control Rendering in Xamarin.Forms

    2. Implementing a View - Rendering a platform-specific view

    3. iOS range slider for Xamarin and Xamarin.Forms

    4. Fullscreen Video Background Control for Xamarin.Forms

    解决方案

    Override TrackRectForBounds to change its height instead of changing transform .

    In MySliderRenderer

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

    Create a subclass of 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);
        }
    }
    

    My test

    Here is Sample

    这篇关于UISlider 增加了滑块大小,但在 iOS 应用程序中没有拇指变形的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆