在我们的项目中,我们将以纵向模式锁定应用程序,到目前为止没有问题。 现在,我们希望可以只旋转某些特定页面或内容(以显示更大的图)。我已经在这个问题上搜索了很多主题 但没有找到明确的解决方案。有什么干净的方法可以为Andoid和Ios在页面上指定方向?
我们还在调查仅旋转绘图视图的可能性,但是在调整其大小时遇到了问题; 无论我为高度和宽度请求指定了什么,该图始终显示为包含页面的宽度和高度。 我们都尝试过在旋转之前将大小反转:
rotatedView.WidthRequest = Height;
rotatedView.HeightRequest = Width;
rotatedView.Rotate(90)
contentView.Content = rotatedView;
并通过强加旋转和缩放后应具有的宽高比将其缩小:
rotatedView.WidthRequest = Width;
double ratio = Height / Width;
rotatedView.HeightRequest = Width / ratio;
rotatedView.Rotation = 90;
rotatedView.ScaleTo(ratio)
contentView.Content = graphRot;
旋转后的视图保持原始页面的长宽比不变,宽度等于页面高度,反之亦然。
任何提示将不胜感激
更新
关于视图旋转,我能够通过将所有内容放置在相对布局中来做到这一点。这样,我可以自由定义视图大小等于旋转后的容器大小。
答案 0 :(得分:0)
我已经在正在处理的应用程序中实现了一个解决方案。我的用例是我想以纵向锁定,除非我在视频播放器中。下面的代码是我如何完成此任务的方法。
对于 iOS :
您将需要在 AppDelegate.cs 中覆盖mocha
,并在其中添加一些逻辑。
GetSupportedInterfaceOrientations
对于 Android :
要在Android上设置正确的标志,您将需要在 LaunchActivity.cs 中设置相应标志的方法。
public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations(UIApplication application, UIWindow forWindow)
{
UIInterfaceOrientationMask supportedOrientation;
if (_AllowRotations == true)
{
supportedOrientation = UIInterfaceOrientationMask.AllButUpsideDown;
}
else
{
supportedOrientation = UIInterfaceOrientationMask.Portrait;
}
return supportedOrientation;
}
如果您想从if (allowRotations == true)
{
RequestedOrientation = ScreenOrientation.Sensor;
}
else
{
RequestedOrientation = ScreenOrientation.Portrait;
}
调用它们,我建议将它们放在某种依赖服务中。我在每个类中的 allowrotations 变量是根据我在Xamarin.Forms
中使用的事件设置的,但是您也可以从依赖项服务中进行设置。