以编程方式显示正确方向的UIView的最佳实践

时间:2012-03-02 10:22:13

标签: ios ipad uiview xamarin.ios uiinterfaceorientation

我正在构建一个monoTouch-iPad应用程序,因为面向启动界面,我磕磕绊绊。

一个问题是,当应用启动UIDevice.CurrentDevice.Orientation时,始终会返回Unknown。您如何确定应用程序的开始方向?我现在找到的所有属性只返回纵向模式,未知或纵向模式的帧大小 - 即使它是横向模式。

我还创建了两个UIViews(一个用于横向,一个用于纵向),现在在UIViewController的WillRotate方法中更改它们。但是我的代码:

if(toInterfaceOrientation==UIInterfaceOrientation.LandscapeLeft || toInterfaceOrientation==UIInterfaceOrientation.LandscapeRight){

        _scrollView.RemoveFromSuperview();
        this.View.Add (_scrollViewLandscape);
        }else{
        _scrollViewLandscape.RemoveFromSuperview();
        this.View.Add (_scrollView);
}
旋转屏幕时,

产生短暂而丑陋的“闪烁” - 至少在模拟器中是这样。

是否有最佳做法来布置您的观点?我知道ShouldAutorotateToInterfaceOrientation但是这对我不起作用,因为我做了很多所有者绘制的东西,在自动化时会被破坏(see my other question)。

我真的很感激不使用Interface-Builder的解决方案,因为我现在正在代码中做所有事情。

更新: Short-Descripton我想要实现的目标: AppStart - >知道正确的Framsize(1024,748或768,1004) - >在正确的框架大小中添加我的自定义视图

UPDATE2:简单和基本的代码段

public override void ViewDidLoad ()
    {
        base.ViewDidLoad ();            
        Console.WriteLine (this.InterfaceOrientation);
    }

返回肖像。即使模拟器处于横向模式。

1 个答案:

答案 0 :(得分:3)

在你的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
    }
}