ios - 在 Xamarin iOS 的单页中强制横向模式?

标签 ios xamarin xamarin.ios screen-orientation

我使用依赖服务强制在 Android 和 iOS 中的单个页面横向显示, 这是针对 Android 的:

public class OrientationService : IOrientationService
    {
        public void Landscape()
        {
            ((Activity)Forms.Context).RequestedOrientation = ScreenOrientation.Landscape;
        }

        public void Portrait()
        {
            ((Activity)Forms.Context).RequestedOrientation = ScreenOrientation.Portrait;
        }
    }

它运作良好并且符合要求:强制横向模式,即使手上的设备方向是纵向,我需要为 iOS 实现相同的效果,试过这个(也试过注释代码):

public class OrientationService : IOrientationService
    {
        public void Landscape()
        {
            UIDevice.CurrentDevice.SetValueForKey(new NSNumber((int)UIInterfaceOrientation.LandscapeLeft), new NSString("orientation"));
            //((AppDelegate)UIApplication.SharedApplication.Delegate).CurrentOrientation = UIInterfaceOrientationMask.Landscape;
            //UIApplication.SharedApplication.SetStatusBarOrientation(UIInterfaceOrientation.LandscapeLeft, false);
        }

        public void Portrait()
        {
            UIDevice.CurrentDevice.SetValueForKey(new NSNumber((int)UIInterfaceOrientation.Portrait), new NSString("orientation"));
            //((AppDelegate)UIApplication.SharedApplication.Delegate).CurrentOrientation = UIInterfaceOrientationMask.Portrait;
            //UIApplication.SharedApplication.SetStatusBarOrientation(UIInterfaceOrientation.Portrait, false);
        }
    }

但这只会在设备处于横向模式时切换到横向,而不像 Android 版本

最佳答案

你应该在 iOS 中做更多的事情

in AppDelegate.cs

public bool allowRotation; 

并重写方法

public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations(UIApplication application, [Transient] UIWindow forWindow)
 {
    if(allowRotation==true)
     {
        return UIInterfaceOrientationMask.Landscape;
     }

    else
     {
        return UIInterfaceOrientationMask.Portrait;
     }
 } 

in dependency service

public class OrientationService : IOrientationService
{
    public void Landscape()
    {
        AppDelegate appDelegate = (AppDelegate)UIApplication.SharedApplication.Delegate;
        appDelegate.allowRotation = true;

        UIDevice.CurrentDevice.SetValueForKey(new NSNumber((int)UIInterfaceOrientation.LandscapeLeft), new NSString("orientation"));
        //((AppDelegate)UIApplication.SharedApplication.Delegate).CurrentOrientation = UIInterfaceOrientationMask.Landscape;
        //UIApplication.SharedApplication.SetStatusBarOrientation(UIInterfaceOrientation.LandscapeLeft, false);
    }

    public void Portrait()
    {
        AppDelegate appDelegate = (AppDelegate)UIApplication.SharedApplication.Delegate;
        appDelegate.allowRotation = true;

        UIDevice.CurrentDevice.SetValueForKey(new NSNumber((int)UIInterfaceOrientation.Portrait), new NSString("orientation"));
        //((AppDelegate)UIApplication.SharedApplication.Delegate).CurrentOrientation = UIInterfaceOrientationMask.Portrait;
        //UIApplication.SharedApplication.SetStatusBarOrientation(UIInterfaceOrientation.Portrait, false);
    }
}

关于ios - 在 Xamarin iOS 的单页中强制横向模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52925584/

相关文章:

xamarin - Visual Studio 2015 - 无法连接到 Xamarin Mac Agent - 为用户 [MY_USER] 配置 SSH 时发生意外错误

c# - Xamarin Studio Storyboard​​空白

ios - 不工作 UISplitViewController - WillHideViewController 未在 monotuch 中调用

ios - 发布到 TestFlight,新测试人员,我真的需要重建/下载我的配置文件吗?

ios - 离线 Fairplay HLS 内容无法播放

ios - NSCalendar firstweekday取决于位置问题

javascript - iOS 11.2.5 上的文本区域插入符不旋转

ios - 如何从NSMutableArray设置实例变量?

xamarin - Designer 不适用于 Android Xamarin 应用程序

xamarin.ios - 如何强制 Monotouch AOT Compiler 查看嵌套的泛型方法?