Тень в UIView не может перекрывать вход, редактор или сборщик в формах Xamarin - PullRequest
0 голосов
/ 22 ноября 2018

Я добавил RoutingEffect в проекте Xamarin Form и PlatformEffect в моем проекте Xamarin.iOS.Это добавит эффект в Stacklayout.Stacklayout в этой демонстрации представляет собой пользовательскую панель навигации.Внизу панели навигации находится прокрутка с множеством ячеек (метка, запись, средство выбора).

Я реализовал в Android все в порядке.Но в iOS есть проблема: эффект тени не может перекрывать некоторые элементы управления, такие как: Entry, Editor, Picker.Не могли бы вы поделиться со мной, как это исправить?Это код в проекте Xamarin.iOS.

public class DropShadowEffect : PlatformEffect
{
    protected override void OnAttached()
    {
        try
        {
            var effect = (myDemo.UIControls.DropShadowEffect)Element.Effects.FirstOrDefault(e => e is myDemo.UIControls.DropShadowEffect);

            if (effect != null)
            {
                Container.Layer.CornerRadius = effect.Radius;
                Container.Layer.ShadowColor = UIColor.Red.CGColor;// effect.Color.ToCGColor();
                Container.Layer.ShadowOffset = new CGSize(effect.DistanceX, effect.DistanceY);
                Container.Layer.ShadowOpacity = 0.8f;
                Container.Layer.ShadowRadius = 2f;
                Container.Layer.ShouldRasterize = true;
                Container.Layer.MasksToBounds = false;
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("Cannot set property on attached control. Error: {0}", ex.Message);
        }
    }

* Слишком сильный эффект тени Метка в порядке

Shadow effect overly Label is OK

* Эффект тени не можетналожение либо Пикер или Entry

cannot overlay either Picker or Entry

1 Ответ

0 голосов
/ 26 ноября 2018

Причина:

На самом деле, например, Label все равно будет перекрывать тень. Но это не кажется очевидным. Если вы установите фон надписи (например, красный), вы увидите наложение.

Решение:

Вы можете установить BackgroundColor из Picker и Entry в пользовательском рендерере, чтобы позволитьальфа как 0.

Например, в EntryRenderer

protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
    {
        base.OnElementChanged(e);

        if (Control != null)
        {
            Control.BackgroundColor = new UIColor(1,1,1,0);//The last parameter sets the alpha of backgound as transparent
            Control.Layer.MasksToBounds = true;
            Control.Layer.CornerRadius = xxx;  //set the rounded corner
            Control.Layer.BorderColor = UIColor.xxx.CGColor;
            Control.Layer.BorderWidth = xxx;           
        }

    }
...