Xamarin.Формы сообщения iOS отображаются ЗА открытыми всплывающими окнами. Как я могу задать ось z вида?

#ios #xamarin.forms

Вопрос:

Я использую этот пользовательский компонент для отображения сообщений на iOS (что-то вроде тостов в Android).

В Android тост всегда отображается сверху, но в iOS, если открыто всплывающее окно, сообщение отображается за макетом:

     void ShowAlert(string message, double seconds)
    {
        Device.BeginInvokeOnMainThread(() => {
            alertDelay = NSTimer.CreateScheduledTimer(seconds, (obj) =>
            {
                dismissMessage();
            });
            alert = UIAlertController.Create("", message, UIAlertControllerStyle.Alert);
            var window = UIApplication.SharedApplication.Delegate.GetWindow();
            window.RootViewController.PresentViewController(alert, true, null);
        });
    }
 

Как я могу установить ось z представления так, чтобы это была страница -> всплывающее окно ->> сообщение.

Спасибо

Ответ №1:

Попробуйте достичь этого, создав пользовательский «всплывающий» UIView.

Просто определите пользовательский UIView для отображения «Предупреждения», затем тост будет показан сверху.

Класс MyPopupView:

 class MyPopupView : UIView
{
    public MyPopupView(string message, string buttonText)
    {
        this.Frame = new CGRect(50, UIScreen.MainScreen.Bounds.Height / 2 - 30, UIScreen.MainScreen.Bounds.Width - 100, 80);
        this.Layer.CornerRadius = 8;
        this.BackgroundColor = UIColor.FromRGB(230, 230, 230);

        UILabel label_Message = new UILabel();
        label_Message.Text = message;
        label_Message.Frame = new CGRect(20, 10, 200, 20);
        UIButton button_OK = new UIButton();
        button_OK.SetTitle(buttonText, UIControlState.Normal);
        button_OK.SetTitleColor(UIColor.Red, UIControlState.Normal);
        button_OK.Frame = new CGRect(this.Bounds.Width / 2 - 30, this.Bounds.Height / 2   10, 60, 20);
        button_OK.TouchUpInside  = Button_OK_TouchUpInside;

        this.AddSubview(label_Message);
        this.AddSubview(button_OK);
    }

    private void Button_OK_TouchUpInside(object sender, EventArgs e)
    {
        this.RemoveFromSuperview();
    }
}
 

Добавить MyPopupView:

 MyPopupView myPopupView = new MyPopupView("A message here!", "I know");
this.View.AddSubview(myPopupView);
 

ФУ, в своем тесте я использовал Toast.iOS.