我正在构建一个 monoTouch-iPad 应用程序,但由于面向启动界面的原因,我正在磕磕绊绊。
一个问题是,当应用启动时 UIDevice.CurrentDevice.Orientation
总是返回 Unknown
。你如何决定你的应用程序从哪个方向开始?我现在发现的所有属性都只返回纵向模式、未知或纵向模式的帧大小——即使它是横向模式。
我还创建了两个 UIView(一个用于横向,一个用于纵向)并在 UIViewController 的 WillRotate
方法中更改它们。但我的代码:
if(toInterfaceOrientation==UIInterfaceOrientation.LandscapeLeft || toInterfaceOrientation==UIInterfaceOrientation.LandscapeRight){
_scrollView.RemoveFromSuperview();
this.View.Add (_scrollViewLandscape);
}else{
_scrollViewLandscape.RemoveFromSuperview();
this.View.Add (_scrollView);
}
在旋转屏幕时会产生短暂而难看的“闪烁” - 至少在模拟器中是这样。
是否有布置 View 的最佳做法?而且我知道 ShouldAutorotateToInterfaceOrientation
但这对我不起作用,因为我正在做很多所有者绘制的东西,在自动调整大小时会损坏( see my other question )。
我非常感谢不使用 Interface-Builder 的解决方案,因为我现在正在用代码做所有事情。
更新:简短描述我想要实现的目标: AppStart -> 知道正确的帧大小(1024,748 或 768,1004) -> 以正确的帧大小添加我的自定义 View
UPDATE2:简单而基本的代码片段
public override void ViewDidLoad ()
{
base.ViewDidLoad ();
Console.WriteLine (this.InterfaceOrientation);
}
返回纵向。即使模拟器处于横向模式。
在你的 UIViewController 里面可以检查 InterfaceOrientation
public override void ViewDidLoad ()
{
if (this.InterfaceOrientation == UIInterfaceOrientation.Portrait
|| this.InterfaceOrientation == UIInterfaceOrientation.PortraitUpsideDown)
{
// portrait
}
else
{
// landsacpe
}
}
但我真的建议使用 View.AutoresizingMask 或覆盖 LayoutSubviews,两者都可以使所有过渡都非常流畅
更新:使用 AutoresizingMask
public override void ViewDidLoad ()
{
UIView view = new CustomView(View.Bounds);
view.AutoresizingMask = UIViewAutoresizing.FlexibleHeight | UIViewAutoresizing.FlexibleWidth;
View.AddSubview(view);
}
更新:覆盖 LayoutSubviews
每次尺寸改变时都会调用LayoutSubviews
public class CustomView : UIView
{
public override void LayoutSubviews ()
{
//layout your view with your own logic using the new values of Bounds.Width and Bounds.Height
}
}
关于ios - 以正确方向以编程方式显示 UIView 的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9531614/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |