Skip to content
This repository was archived by the owner on May 1, 2024. It is now read-only.

Commit f49bf17

Browse files
committed
Force iOS 13 to use Full Screen for Modal
- Once we are on xCode 11 and can account for swipe dismiss we can make this better
1 parent be66bc0 commit f49bf17

File tree

5 files changed

+40
-4
lines changed

5 files changed

+40
-4
lines changed

Xamarin.Forms.Core/PlatformConfiguration/iOSSpecific/Page.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ public static IPlatformElementConfiguration<iOS, FormsElement> SetSafeAreaInsets
131131
}
132132

133133
public static readonly BindableProperty ModalPresentationStyleProperty =
134-
BindableProperty.Create(nameof(ModalPresentationStyle), typeof(UIModalPresentationStyle), typeof(Page), UIModalPresentationStyle.FullScreen);
134+
BindableProperty.Create(nameof(ModalPresentationStyle), typeof(UIModalPresentationStyle), typeof(Page), UIModalPresentationStyle.Automatic);
135135

136136
public static UIModalPresentationStyle ModalPresentationStyle(this IPlatformElementConfiguration<iOS, FormsElement> config)
137137
{

Xamarin.Forms.Core/PlatformConfiguration/iOSSpecific/UIModalPresentationStyle.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
public enum UIModalPresentationStyle
44
{
55
FullScreen,
6-
FormSheet
6+
FormSheet,
7+
Automatic
78
}
89
}

Xamarin.Forms.Platform.iOS/Extensions/Extensions.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using UIKit;
23
using Xamarin.Forms.Internals;
34

@@ -74,6 +75,21 @@ public static void ApplyKeyboard(this IUITextInputTraits textInput, Keyboard key
7475
}
7576
}
7677

78+
internal static UIModalPresentationStyle ToNativeModalPresentationStyle(this PlatformConfiguration.iOSSpecific.UIModalPresentationStyle style)
79+
{
80+
switch (style)
81+
{
82+
case PlatformConfiguration.iOSSpecific.UIModalPresentationStyle.FormSheet:
83+
return UIModalPresentationStyle.FormSheet;
84+
case PlatformConfiguration.iOSSpecific.UIModalPresentationStyle.FullScreen:
85+
return UIModalPresentationStyle.FullScreen;
86+
case PlatformConfiguration.iOSSpecific.UIModalPresentationStyle.Automatic:
87+
return UIModalPresentationStyle.Automatic;
88+
default:
89+
throw new ArgumentOutOfRangeException(nameof(style));
90+
}
91+
}
92+
7793
internal static UIReturnKeyType ToUIReturnKeyType(this ReturnType returnType)
7894
{
7995
switch (returnType)

Xamarin.Forms.Platform.iOS/Forms.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public static class Forms
3737
static bool? s_isiOS10OrNewer;
3838
static bool? s_isiOS11OrNewer;
3939
static bool? s_respondsTosetNeedsUpdateOfHomeIndicatorAutoHidden;
40+
static bool? s_isiOS13OrNewer;
4041
#endif
4142

4243
#if __MOBILE__
@@ -80,6 +81,16 @@ internal static bool RespondsToSetNeedsUpdateOfHomeIndicatorAutoHidden
8081
return s_respondsTosetNeedsUpdateOfHomeIndicatorAutoHidden.Value;
8182
}
8283
}
84+
85+
internal static bool IsiOS13OrNewer
86+
{
87+
get
88+
{
89+
if (!s_isiOS13OrNewer.HasValue)
90+
s_isiOS13OrNewer = UIDevice.CurrentDevice.CheckSystemVersion(13, 0);
91+
return s_isiOS13OrNewer.Value;
92+
}
93+
}
8394
#endif
8495

8596
static IReadOnlyList<string> s_flags;

Xamarin.Forms.Platform.iOS/ModalWrapper.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,16 @@ internal ModalWrapper(IVisualElementRenderer modal)
1414
_modal = modal;
1515

1616
var elementConfiguration = modal.Element as IElementConfiguration<Page>;
17-
if (elementConfiguration?.On<PlatformConfiguration.iOS>().ModalPresentationStyle() == PlatformConfiguration.iOSSpecific.UIModalPresentationStyle.FormSheet)
18-
ModalPresentationStyle = UIKit.UIModalPresentationStyle.FormSheet;
17+
var modalPresentationStyle = elementConfiguration?.On<PlatformConfiguration.iOS>()?.ModalPresentationStyle() ?? PlatformConfiguration.iOSSpecific.UIModalPresentationStyle.Automatic;
18+
19+
if (modalPresentationStyle != PlatformConfiguration.iOSSpecific.UIModalPresentationStyle.Automatic)
20+
{
21+
ModalPresentationStyle = modalPresentationStyle.ToNativeModalPresentationStyle();
22+
}
23+
else if(Forms.IsiOS13OrNewer)
24+
{
25+
ModalPresentationStyle = UIKit.UIModalPresentationStyle.FullScreen;
26+
}
1927

2028
View.BackgroundColor = UIColor.White;
2129
View.AddSubview(modal.ViewController.View);

0 commit comments

Comments
 (0)