web-dev-qa-db-fra.com

Espace supérieur et inférieur dans l'iPhone X sous forme de Xamarin

J'utilise XAML pour la conception d'interface utilisateur, mon application fonctionne correctement dans moins d'un appareil Iphone X. Seul problème dans Iphone X, il y a de l'espace supplémentaire en haut et en bas.

Si j'utilise le code ci-dessous pour l'activation de la zone sécurisée pour Iphone X, il y aura plus d'espace en bas et en haut. On<Xamarin.Forms.PlatformConfiguration.iOS>().SetUseSafeArea(true);

J'ai obtenu le code de configuration de mise en page SafeArea ici SetUserSafeArea

Aussi, j'utilise SetHasNavigationBar pour désactiver le titre de navigation dans l'en-tête.Mais il n'y a pas de chance dans Iphone X.

NavigationPage.SetHasNavigationBar(this, false);

Voici la sortie réelle dans Iphone X  enter image description here

Ce qui me manque dans le code ou le réglage pour Iphone X sous Xamarin Form

7
Pratius Dubey

J'ai résolu ce problème.

Voici une réponse.

  1. PCL crée une interface à utiliser dans IOS Native App.

    public interface IDeviceInfo
    {
        bool IsIphoneXDevice();
    }
    
  2. Implémentez cette interface dans IOS Native App.

    [Assembly: Dependency(typeof(DeviceInfoService))]
    namespace POC.iOS.DependencyServices
    {
        public class DeviceInfoService:IDeviceInfo
        {
            public DeviceInfoService() { }
    
            public bool IsIphoneXDevice()
            {
                if (UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Phone)
                {
                    if ((UIScreen.MainScreen.Bounds.Height * UIScreen.MainScreen.Scale) == 2436)
                    {
                        return true;
                    }
                }
                return false;
            }
        }
    }
    
  3. Appelez cette méthode sous la forme Xamarin à l'aide du service Dependance Service.And et écrivez la logique pour la présentation IPhone X.

    public partial class Page : ContentPage
    {
        public Page()
        {
            InitializeComponent();
    
            var isDeviceIphone = DependencyService.Get<IDeviceInfo>().IsIphoneXDevice();
            if (isDeviceIphone)
            {
                var safeInsets = On<Xamarin.Forms.PlatformConfiguration.iOS>().SafeAreaInsets();
                safeInsets.Bottom =20;
                safeInsets.Top = 20;
                this.Padding = safeInsets;
            }
        }
    }
    
4
Pratius Dubey

J'ai eu récemment le même problème. Ce que j'ai découvert, c'est qu'iOS détermine si votre application peut gérer l'iPhone X à l'aide de l'écran de démarrage. Aucune image d'écran de démarrage ne fonctionnerait. Je devais créer un storyboard et l'utiliser pour mon écran de démarrage. Ce lien devrait vous aider: https://developer.xamarin.com/guides/ios/application_fundamentals/working_with_images/launch-screens/

2
Tim Southard

SafeAreaInsets a joué un tour pour nous.

Dans AppDelegate.CS,

base.FinishedLaunching(uiApplication, launchOptions);

doit être remplacé par le code ci-dessous:

var result = base.FinishedLaunching(uiApplication, launchOptions);
            try {
                if (UIApplication.SharedApplication.KeyWindow != null) {
                    double top = 0;
                    double bottom = 0;
                    if (UIDevice.CurrentDevice.CheckSystemVersion(11, 0)) {
                        top = UIApplication.SharedApplication.KeyWindow.SafeAreaInsets.Top;
                        bottom = UIApplication.SharedApplication.KeyWindow.SafeAreaInsets.Bottom;
                    }
//Store safe area values using NSUserDefaults.StandardUserDefaults 
                    DependencyService.Get<ISettingsService>().AddOrUpdateValue("IPhoneXSafeTop", top);
                    DependencyService.Get<ISettingsService>().AddOrUpdateValue("IPhoneXSafeBottom", bottom);
                    DependencyService.Get<ISettingsService>().Save();
                }
            } catch (Exception ex) {
                Console.WriteLine("Ex in FinishedLaunching: " + ex.Message);
            }
            return result;

Dans PCL, le fichier xaml.cs ajoute le code ci-dessous dans le constructeur:

var IPhoneXSafeBottom = DependencyService.Get<ISettingsService> ().GetValueOrDefault<Double> ("IPhoneXSafeBottom", 0);
var IPhoneXSafeTop = DependencyService.Get<ISettingsService> ().GetValueOrDefault<Double> ("IPhoneXSafeTop", 0);
            if (IPhoneXSafeBottom > 0) {
                MainLayout.Padding = new Thickness(0, IPhoneXSafeTop, 0, IPhoneXSafeBottom);

            }
1
Ramu Krishna

Pour obtenir la taille d'écran appropriée pour fonctionner sur iOS, j'ai simplement ajouté les images appropriées aux écrans de démarrage.

Par exemple, dans mon projet iOS, j'ai ajouté dans mon dossier Resources, une image nommée [email protected] et ses dimensions étaient 1125x2436 .

Et puis dans mon fichier Info.plist, j'ai ajouté le code suivant sous la clé UILaunchImages:

<key>UILaunchImages</key>
    <array>
        <dict>
            <key>UILaunchImageMinimumOSVersion</key>
            <string>8.0</string>
            <key>UILaunchImageName</key>
            <string>Default-812h</string>
            <key>UILaunchImageOrientation</key>
            <string>Portrait</string>
            <key>UILaunchImageSize</key>
            <string>{375, 812}</string>
        </dict>
        ... other launch images ...
    </array>
1
sme