Я использую Rg.Plugins.Popup в своем приложении Xamarin Forms. Это работает на Android, но у меня есть проблема с iOS. Это мой элемент управления (на основе PopupPage):
<pages:PopupPage
BackgroundColor = "White"
x:Class = "MyApp.Controls.PopupAlert"
xmlns = "http://xamarin.com/schemas/2014/forms"
xmlns:x = "http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:pages = "http://rotorgames.com"
Padding = "50,10">
<Frame
BackgroundColor = "White"
CornerRadius = "25"
HeightRequest = "150"
VerticalOptions = "Center"
WidthRequest = "200">
<StackLayout>
<Label
FontAttributes = "Bold"
FontSize = "Title"
HorizontalOptions = "Center"
HorizontalTextAlignment = "Center"
Text = "MyApp"
TextColor = "Black" />
<Label
x:Name = "LblMes"
Margin = "0,5"
FontSize = "Subtitle"
HorizontalOptions = "CenterAndExpand"
TextColor = "Black"
HorizontalTextAlignment = "Center"
VerticalOptions = "CenterAndExpand" />
<BoxView Style = "{StaticResource Separator}" />
<Label
Margin = "0,6,0,0"
FontAttributes = "Bold"
FontSize = "Subtitle"
HorizontalTextAlignment = "Center"
HorizontalOptions = "Center"
Text = "OK"
TextColor = "{StaticResource PrimaryColor}"
VerticalOptions = "Center">
<Label.GestureRecognizers>
<TapGestureRecognizer Tapped = "OkTapped" />
</Label.GestureRecognizers>
</Label>
</StackLayout>
</Frame>
</pages:PopupPage>
Это код:
public partial class PopupAlert
{
public PopupAlert()
{
InitializeComponent();
}
public void Init(String message)
{
LblMes.Text = message;
}
private async void OkTapped(object sender, EventArgs e)
{
await PopupNavigation.Instance.PopAsync();
}
}
Я вызываю свое всплывающее окно и вижу его:
private readonly PopupAlert _popAlert = new PopupAlert();
private bool _isShow = false;
public async Task ShowMessage(string message)
{
//await App.Current.MainPage.DisplayAlert(AppRes.AppTitle, message, "Ok");
try
{
if (_isShow)
{
return;
}
_isShow = true;
_popAlert.Init(message);
await PopupNavigation.Instance.PushAsync(_popAlert);
}
finally
{
_isShow = false;
}
}
Но я нажимаю кнопку «ОК», у меня есть исключение:
StackTrace " at Rg.Plugins.Popup.IOS.Platform.PopupPlatformRenderer.PrefersStatusBarHidden ()
[0x00000] in
C:\\Users\\mhvdi\\Documents\\OpenSource\\Rg.Plugins.Popup\\Rg.Plugins.Popup\\Platforms\\Ios\\Platform\\PopupPlatformRenderer.cs:61 \n at (wrapper managed-to-native) UIKit.UIA…" string
Это мой AppDelegate:
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
Rg.Plugins.Popup.Popup.Init();
global::Xamarin.Forms.Forms.Init();
....
}
Как я могу решить эту проблему?
1. Я обнаружил, что проблема возникает только в последней версии Rg.Plugins.Popup 2.0.0.8.
2. Использование более ранней версии будет работать как 2.0.0.7
.
3. проблема была зарегистрирована на Github.
4. Проверьте, пуст ли стек, прежде чем извлекать стек:
if (Rg.Plugins.Popup.Services.PopupNavigation.Instance.PopupStack.Any())
{
await PopupNavigation.Instance.PopAsync();
}
Я столкнулся с той же проблемой, и она была решена путем установки последней версии 2.0.0.9.