Проблема с ротацией ContentPage в формах Xamarin - PullRequest
0 голосов
/ 14 июня 2019

Я работаю над некоторыми функциями для моего нового проекта, где у меня есть страница с контентом, которую мне нужно всегда показывать в Portrait. Я уже достиг этого, внедрив пользовательские средства визуализации и переопределив OnWindowVisibilityChanged для Android (в данный момент я не вхожу в iOS). Проблема в том, что когда я перехожу на новую страницу из книжной, следующая должна поддерживать обе ориентации, но отображается только в книжной.

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

Есть предложения?

Вот моя основная реализация OnWindowVisibilityChanged

protected override void OnWindowVisibilityChanged([GeneratedEnum] ViewStates visibility)
{
    base.OnWindowVisibilityChanged(visibility);

    var activity = (Activity)Context;

    if (visibility.Equals(ViewStates.Gone))
    {
        // go back to previous orientation
        activity.RequestedOrientation = _previousOrientation;
    }
    else if (visibility.Equals(ViewStates.Visible))
    {
        if (_previousOrientation.Equals(ScreenOrientation.Sensor))
        {
            _previousOrientation = activity.RequestedOrientation;
        }

        activity.RequestedOrientation = ScreenOrientation.Portrait;
    }
}

1 Ответ

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

Вот один плагин под названием Xamarin.Plugin.DeviceOrientation, вы можете использовать его, это легко решит вашу проблему.

Например, посмотрите на это условие переключателя

switch (orientation)
        {
            case DeviceOrientations.Free:
                CrossDeviceOrientation.Current.UnlockOrientation();
                break;
            case DeviceOrientations.Landscape:
                CrossDeviceOrientation.Current.LockOrientation(Plugin.DeviceOrientation.Abstractions.DeviceOrientations.Landscape);
                break;
            case DeviceOrientations.Portrait:
                CrossDeviceOrientation.Current.LockOrientation(Plugin.DeviceOrientation.Abstractions.DeviceOrientations.Portrait);
                break;
            default:
                break;
        }

толькона одной странице вы можете вызвать это на onApperaing () CrossDeviceOrientation.Current.LockOrientation(Plugin.DeviceOrientation.Abstractions.DeviceOrientations.Portrait);

и снова, чтобы освободить ориентацию, позвоните на onDiappearing ()

CrossDeviceOrientation.Current.UnlockOrientation();

для получения дополнительной информации икак использовать перейдите по этой ссылке, https://github.com/wcoder/Xamarin.Plugin.DeviceOrientation

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