Текст строки состояния XR остается черным, но не iPhone 8 или iPad - PullRequest
0 голосов
/ 06 июня 2019

Используя методы, существующие в googleland, я установил белый текст в строке состояния iOS.Это прекрасно работает, за исключением iPhone XR, который устанавливает черный текст.

Методы, которые я нахожу для решения этой проблемы, связаны со Swift и Objective C.Какова техника для Xamarin.Forms?

В plist у меня есть

  • Стиль строки состояния = Белый
  • Просмотр внешнего вида строки состояния на основе контроллера = Нет

Исходя из этого связанного вопроса, Цвет текста строки состояния на iPhone XR отличается , я пытался

  • Просмотр внешнего вида строки состояния на основе контроллера = Да

Но это превращает строку состояния всех устройств iOS в черный цвет, включая XR.Затем говорится о каком-то Swift-коде, для которого я не знаю аналога в Xamarin.

Исходя из этого связанного вопроса, https://forums.xamarin.com/discussion/89840/change-status-bar-color-on-ios

Он близок, но меняет цвет фона бара,Я не могу найти никакого свойства в объекте statusBar, который говорит о цвете текста.

Исходя из этого связанного вопроса, https://forums.xamarin.com/discussion/17922/navigationpage-statusbar-color

Использование SetStatusBarStyle также не влияет на XR.

Примечание: я не использую NavigationPage

Ответы [ 3 ]

0 голосов
/ 07 июня 2019

Решение Swift 4.2 с NavigationController

Первый шаг:

Откройте ваш info.plist и вставьте новый ключ с именем "Просмотр внешнего вида строки состояния на основе контроллера " или UIViewControllerBasedStatusBarAppearance до ДА , чтобы позволить каждому VC использовать свое собственное свойство состояния.

Второй шаг

В каждом VC переопределите свойство prefeStatusBarStyle следующим образом:

override var preferredStatusBarStyle : UIStatusBarStyle { return .lightContent //.default for black style }

Последний шаг

Переопределите предпочитаемыйStatusBarStyleсвойство в вашем пользовательском классе NavigationController:

`class NavigationController: UINavigationController {

переопределить переменную varStStatusBarStyle: UIStatusBarStyle {

if let topVC = viewControllers.last {
    //return the status property of each VC, look at step 2
    return topVC.preferredStatusBarStyle  
}

return .default

}`

0 голосов
/ 11 июня 2019

Я знаю, что мы не должны использовать UIStatusBarStyle сейчас. Но он работает на iOS 12.2 на моем симуляторе XR. Я добавил ключи в свой info.plist:

<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>

Текст строки состояния меняется на белый: enter image description here

Использование кода для изменения цвета также отлично работает:

UIApplication.SharedApplication.StatusBarStyle = UIStatusBarStyle.LightContent;

Вы можете использовать его для динамической настройки стиля строки состояния.

Тем не менее, создание пользовательского средства визуализации для указанной страницы является еще одним вариантом. Во-первых, установите для UIViewControllerBasedStatusBarAppearance значение true в info.plist.

Тогда рендерер страницы может выглядеть так:

[assembly: ExportRenderer(typeof(MainPage), typeof(CustomPageRenderer))]
namespace App.iOS
{
    public class CustomPageRenderer : PageRenderer
    {
        public override UIStatusBarStyle PreferredStatusBarStyle()
        {
            return UIStatusBarStyle.LightContent;
        }
    }
}

MainPage - это класс страницы содержимого в формах. И я установил его на MainPage.

приложения
0 голосов
/ 06 июня 2019

Ты довольно близко.Похоже, вам нужно будет использовать пользовательский рендерер для этого.В ViewController вы переопределите функцию PreferredStatusBarStyle для любого из трех перечислений , показанных здесь , следующим образом:

public override UIStatusBarStyle PreferredStatusBarStyle()
{
    return UIStatusBarStyle.LightContent;
}
...