gpt4 book ai didi

ios - iOS 上的 Xamarin Forms 如何设置页面的屏幕方向?

转载 作者:可可西里 更新时间:2023-11-01 03:35:55 24 4
gpt4 key购买 nike

所以标题说明了一切。我现在关心的是 iOS。我试图为我的基页“LandscapeContentPage”起诉自定义渲染器,希望它能强制将其渲染为横向。我一直没有成功。

我试图使用我在 ViewDidAppear 中发现的 hack,你提供了一个“假”UIViewController,它覆盖了 GetSupportedInterfaceOrientations 以仅返回 Landscape。这类作品。肉看起来像这样:

var c = new LandscapeViewController();
c.View.BackgroundColor = UIColor.Cyan;

await PresentViewControllerAsync(c, false);
await DismissViewControllerAsync(false);

如果我在 Dismiss 行设置断点,我可以在模拟器中看到 View 确实更改为横向,模拟器窗口实际上会自行旋转。当我继续时,要么抛出有关 View 转换的错误,要么 ViewDidAppear 再次触发并且原始页面以纵向显示。

所以,我现在或多或少迷路了。我尝试了很多不同的事情,但成功率为零。我不明白为什么没有开箱即用的机制。如果没有方向处理,如此昂贵的工具集/框架似乎是不完整的。

谢谢。

最佳答案

我为此使用了依赖服务。

https://developer.xamarin.com/guides/cross-platform/xamarin-forms/dependency-service/

界面

public interface IOrientationHandler
{
void ForceLandscape();

void ForcePortrait();
}

从Forms调用接口(interface)

DependencyService.Get<IOrientationHandler>().ForceLandscape();

IOS 实现

public class OrientationHandlerImplementation : IOrientationHandler
{
public void ForceLandscape()
{
UIDevice.CurrentDevice.SetValueForKey(new NSNumber((int)UIInterfaceOrientation.LandscapeLeft), new NSString("orientation"));
}

public void ForcePortrait()
{
UIDevice.CurrentDevice.SetValueForKey(new NSNumber((int)UIInterfaceOrientation.Portrait), new NSString("orientation"));
}
}

安卓实现

public class OrientationHandler : BaseDependencyImplementation, IOrientationHandler
{
public void ForceLandscape()
{
GetActivity().RequestedOrientation = ScreenOrientation.Landscape;
}

public void ForcePortrait()
{
GetActivity().RequestedOrientation = ScreenOrientation.Portrait;
}
}

编辑 - 根据要求添加基础依赖实现

基础依赖实现

 public class BaseDependencyImplementation : Object
{
public Activity GetActivity()
{
var activity = (Activity)Forms.Context;
return activity;
}
}

如果您想为整个应用设置方向,可以在应用设置/ list 文件中完成。

关于ios - iOS 上的 Xamarin Forms 如何设置页面的屏幕方向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29057972/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com