Xamarin Forms Shell, охватывающая верхнюю информационную линию на iOS (iPad) - PullRequest
0 голосов
/ 26 октября 2019

У меня есть приложение Xamarin Forms, использующее новую функцию Shell. Моя проблема сейчас в том, что область меню оболочки (область меню Гамбургера вверху) закрыта моим приложением, и я бы предпочел, чтобы это не было.

Вот то, о чем я говорю.

enter image description here

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

В других приложениях я делал это на страницах контента:

<ContentPage.Padding>
    <OnPlatform x:TypeArguments="Thickness">
        <On Platform="iOS">8,20,8,0</On>
        <On Platform="Android">8,0,8,0</On>
        <On Platform="UWP">8,0,8,0</On>
    </OnPlatform>
</ContentPage.Padding>

и на странице оболочки я пробовал:

<Shell.Padding>
    <OnPlatform x:TypeArguments="Thickness">
        <On Platform="iOS">8,20,8,0</On>
        <On Platform="Android">8,0,8,0</On>
        <On Platform="UWP">8,0,8,0</On>
    </OnPlatform>
</Shell.Padding>

, но это не имеет значения. Любая идея, как сделать так, чтобы дата / время не перекрывались меню Shell?

ОБНОВЛЕНИЕ: после применения областей iOS Safe, как описано ниже, приложение выглядит для меня одинаково:

enter image description here

Фон, стоящий за данными и временем, по-прежнему является цветом фона заголовка оболочки (т. Е. Черного), поэтому вы не можете их видеть. Я хочу, чтобы оболочка переместилась вниз, чтобы пользователи все еще могли видеть дату / время слева, а индикаторы сети / заряда - справа.

Ответы [ 2 ]

0 голосов
/ 29 октября 2019

У меня есть обходной путь, изменив Цвет текста строки состояния, чтобы пометить его. Если цвет фона навигации вашего приложения всегда остается темным, этот обходной путь не будет проблемой. Однако это не идеальное решение. Потому что его нельзя изменить обратно во время выполнения. Прежде чем найти лучшее решение, вы можете попробовать его.

Временное решение необходимо открыть Info.plist в решении iOS,

enter image description here

Добавление двух ключевых значений для изменения стиля содержимого строки состояния:

<string>Assets.xcassets/AppIcon.appiconset</string>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>

enter image description here

Тогда даже чёрный цвет панели навигации будет чёрным, будет виден цвет текста строки состояния.

enter image description here

Второй Временное решение : (лучше, чем первый)

Также нужно открыть Info.plist в решении iOS, но просто добавить одно значение ключа внутри него.

<string>Assets.xcassets/AppIcon.appiconset</string>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

Затем в AppDelegate.cs добавьте метод для установки цвета фона строки состояния равным White color.

public override void OnActivated(UIApplication uiApplication)
{
    base.OnActivated(uiApplication);
    if (UIDevice.CurrentDevice.CheckSystemVersion(13, 0))
    {
        // If VS has updated to the latest version , you can use StatusBarManager , else use the first line code
        // UIView statusBar = new UIView(UIApplication.SharedApplication.StatusBarFrame);
        UIView statusBar = new UIView(UIApplication.SharedApplication.KeyWindow.WindowScene.StatusBarManager.StatusBarFrame);
        statusBar.BackgroundColor = UIColor.White;
        //statusBar.TintColor = UIColor.White;
        UIApplication.SharedApplication.KeyWindow.AddSubview(statusBar);
    }
    else
    {
        UIView statusBar = UIApplication.SharedApplication.ValueForKey(new NSString("statusBar")) as UIView;
        if (statusBar.RespondsToSelector(new ObjCRuntime.Selector("setBackgroundColor:")))
        {
            statusBar.BackgroundColor = UIColor.White;
            //statusBar.TintColor = UIColor.White;
            UIApplication.SharedApplication.StatusBarStyle = UIStatusBarStyle.BlackOpaque;
        }
    }
}

Изображение следующим образом:

enter image description here

Эффект:

enter image description here

Примечание. Если найден лучший обходной путь, позже обновится здесь.

0 голосов
/ 28 октября 2019

Поскольку iOS 11 и выше, я настоятельно рекомендую вам установить Безопасную зону в iOS, это довольно просто и может решить вашу проблему: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/platform/ios/page-safe-area-layout

...