it-swarm.com.ru

Дополнительное нижнее и верхнее пространство в iPhone X в форме Xamarin

Я использую XAML для дизайна пользовательского интерфейса, мое приложение работает нормально меньше, чем на устройстве Iphone X. Единственная проблема в Iphone X - получение верхнего и нижнего дополнительного пространства.

Если я использую приведенный ниже код для включения безопасной зоны Iphone X, он получает больше места снизу и сверху .On<Xamarin.Forms.PlatformConfiguration.iOS>().SetUseSafeArea(true);

Я получил код настройки макета SafeArea здесь SetUserSafeArea

Также я использую SetHasNavigationBar для отключения заголовка навигации заголовка. Но в Iphone X нет удачи.

NavigationPage.SetHasNavigationBar(this, false);

Вот фактический вывод в Iphone X  enter image description here

Что мне не хватает в коде или настройке для Iphone X в форме Xamarin

7
Pratius Dubey

Я решил эту проблему.

Вот ответ.

  1. PCL создает интерфейс для использования в IOS Native App.

    public interface IDeviceInfo
    {
        bool IsIphoneXDevice();
    }
    
  2. Реализуйте этот интерфейс в собственном приложении IOS.

    [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. Вызовите этот метод в форме Xamarin, используя службу зависимостей. И запишите логику для макета 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

У меня недавно была такая же проблема. Я обнаружил, что iOS определяет, может ли ваше приложение обрабатывать iPhone X с помощью заставки. Не было изображений заставки, которые бы работали. Мне пришлось создать раскадровку и использовать ее для заставки. Эта ссылка должна помочь вам: https://developer.xamarin.com/guides/ios/application_fundamentals/working_with_images/launch-screens/

2
Tim Southard

SafeAreaInsets сделал трюк для нас.

В AppDelegate.CS,

base.FinishedLaunching(uiApplication, launchOptions);

следует заменить на код ниже:

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;

В PCL, файл xaml.cs добавить код ниже в конструкторе:

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

Я получил правильный размер экрана для работы на iOS, просто добавив нужные изображения заставки.

Например, в моем проекте iOS я добавил в свою папку Resources изображение с именем [email protected], и размеры изображения были 1125x2436 .

И затем в своем файле Info.plist я добавил следующий код под ключом 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