【问题标题】:Xamarin custom renderer rounded corners results in 2 bordersXamarin 自定义渲染器圆角导致 2 个边框
【发布时间】:2019-02-16 20:51:38
【问题描述】:

我在 iOS 上使用自定义渲染器创建了圆角:

protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.DatePicker> e)
    {
        base.OnElementChanged(e);

        if (Control != null)
        {
            Control.TextAlignment = UIKit.UITextAlignment.Center;
            Control.BackgroundColor = Color.FromHex(Consts.PICKER_BACKGROUND_COLOR).ToUIColor();
            Control.TextColor = Color.FromHex(Consts.PICKER_TEXT_COLOR).ToUIColor();
            Control.Layer.CornerRadius = Consts.PICKER_CORNER_RADIUS;
            Control.Layer.BorderWidth = Consts.PICKER_STROKE_WIDTH;
            Control.Layer.BorderColor = Color.FromHex(Consts.PICKER_STROKE_COLOR).ToCGColor();

        }
    }

这是有效的;并给我以下结果:

但是,如果您仔细观察,日期和时间选择器周围有 2 个边框。我添加了一个边框和一个“默认”边框。

这只发生在 DatePicker、TimePicker 和 Picker 上。不适用于编辑或条目。

问题: 为什么有2个边界?以及如何删除“默认”边框?

【问题讨论】:

    标签: xamarin.forms xamarin.ios custom-renderer


    【解决方案1】:

    尝试将以下代码添加到您的方法中:

    if (Control != null)
      {
        Control.TextAlignment = UIKit.UITextAlignment.Center;
        Control.BackgroundColor = Color.FromHex(Consts.PICKER_BACKGROUND_COLOR).ToUIColor();
        Control.TextColor = Color.FromHex(Consts.PICKER_TEXT_COLOR).ToUIColor();
        Control.Layer.MasksToBounds=true; //It is important
            ... 
      }
    

    Control.Layer.MasksToBounds=true;

    表示如果子图层切掉图层边界,默认为false,设置为true会切掉多余的部分。

    我使用了上面的代码,它工作正常。

    【讨论】:

    • 完美!按预期工作。
    猜你喜欢
    • 2021-05-01
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-28
    • 2020-10-19
    相关资源
    最近更新 更多