Xamarin Custom Renderer закругленные углы приводит к 2 границ - PullRequest
0 голосов
/ 12 сентября 2018

Я создал закругленные углы на 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();

        }
    }

Это работает;и дает мне следующий результат:

Rounded corners

Однако, если вы посмотрите внимательно, вокруг выбора даты и времени есть 2 границы.Я добавил одну рамку и рамку по умолчанию.

Это происходит только для DatePicker, TimePicker и Picker.Не для редактора или ввода.

Вопросы: почему существуют две границы?И как я могу удалить границу «по умолчанию»?

1 Ответ

0 голосов
/ 13 сентября 2018

Попробуйте добавить следующий код в ваш метод:

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 приведет к удалению лишнего.

Я использовал приведенный выше код, и он отлично работает.

...