Есть ли способ вызвать Window.OverrideUserInterfaceStyle в iOS проекте форм Xamarin до отображения экрана раскадровки? - PullRequest
0 голосов
/ 11 апреля 2020

В моем AppDelegate у меня есть способ изменить UIUserInterfaceStyle:

[Register("AppDelegate")]
public partial class AppDelegate :     global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
  {
  public override bool FinishedLaunching(UIApplication app, NSDictionary options)
    {
        global::Xamarin.Forms.Forms.Init();
        MessagingCenter.Subscribe<Page, bool>(this, "ModeChanged", callback: OnModeChanged);
        LoadApplication(new App());
        return base.FinishedLaunching(app, options);
    }
    private void OnModeChanged(Page page, bool IsDarkModeEnabled)
    {
        if (IsDarkModeEnabled)
            Window.OverrideUserInterfaceStyle = UIUserInterfaceStyle.Dark;
        else
            Window.OverrideUserInterfaceStyle = UIUserInterfaceStyle.Light;
    }

}

Что я хотел бы сделать, это сделать это до появления раскадровки, так как я хочу изменить цвет раскадровки, проверив некоторые сохраненные данные (я не уверен, что я мог проверить).

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

Ответы [ 2 ]

1 голос
/ 11 апреля 2020

Вы можете использовать TraitCollectionChanged на странице согласно документации.

public override void TraitCollectionDidChange(UITraitCollection previousTraitCollection)
        {
            base.TraitCollectionDidChange(previousTraitCollection);

            App.ApplyTheme();
        }

Ссылка: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/theming/dark-mode

Поскольку вы отметили это как формы Xamarin, я предполагаю, что вы используете страницу форм Xamarin,

Вы можете поместить этот код в OnAppearing() метод переопределения страницы, чтобы сделать это до визуальной загрузки страницы. Для вызова нативного метода используйте DependencyService

override void OnAppearing() {

var ui=DependencyService.Get<IUserInterface>();
ui?.CallUIStyle();
class IosUserInterface: IUserInterface
{
    void CallUIStyle() 
    {

    Window.OverrideUserInterfaceStyle = //

   } 
} 

CallUIStyle должен иметь реализацию Window OverloadUserInterface.

0 голосов
/ 25 апреля 2020

Ваш вопрос сбивает с толку, потому что он не упоминает, какой раскадровки. Каждое приложение имеет раскадровку экрана запуска, а некоторые другие предпочитают, чтобы после экрана запуска добавлялась раскадровка экрана spla sh.

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

Это не просто ограничение ксамарина. Xamarin использует нативную разработку, и серьезная проблема определяется ограничениями нативного разработчика iOS. Это не просто ограничение Xamarin. Xamarin использует нативную разработку, и серьезная проблема обусловлена ​​необходимостью iOS разработки.

Вот несколько ссылок для вас: { ссылка }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...