使用静态UITableView时限制视图控制器的方向

时间:2014-09-24 07:57:15

标签: c# ios uitableview orientation uiinterfaceorientation

我已经使用iOS Designer(Objective-C世界中的IB)设置了静态UITableView。但是,尽管我想限制它,但方向却发生了变化。

我做了以下事情:

模拟指标下的属性中,我选择纵向作为方向。我正在为UITableViewController实现以下功能:

public override bool ShouldAutorotate ()
{
    return false;
}

public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations ()
{
    return UIInterfaceOrientationMask.Portrait;
}

public override UIInterfaceOrientation PreferredInterfaceOrientationForPresentation ()
{
    return UIInterfaceOrientation.Portrait;
}

GetSupportedInterfaceOrientations被调用,我返回 Portrait ,但视图仍在旋转。我缺少什么?

修改

我使用了View Orientation中讨论的方法。这适用于我的视图控制器。静态UITableViewController以这种方式在堆栈中推送:

this.PresentViewController (new UINavigationController(myStaticTableViewController), true, null);

这里使用UINavigationController的标准实现。我也尝试了CustomNavigationController实现

partial class CustomNavigationController : UINavigationController
{

    public CustomNavigationController (IntPtr handle) : base (handle)
    {
    }

    public override bool ShouldAutorotate ()
    {
        return TopViewController.ShouldAutorotate();
    }

    public override UIInterfaceOrientation PreferredInterfaceOrientationForPresentation ()
    {
        return TopViewController.PreferredInterfaceOrientationForPresentation ();
    }
}

但是我不能做这样的事情

this.PresentViewController (new CustomNavigationController(myStaticTableViewController), true, null);

因为它无法将我的表视图控制器转换为IntPtr。也许这就是它不尊重界面方向的原因。我有什么解决方案?

1 个答案:

答案 0 :(得分:0)

似乎我只需添加另一个构造函数,如链接线程中所述。现在我的CustoMNavigationController看起来像这样:

partial class CustomNavigationController : UINavigationController
{

    public CustomNavigationController(UIViewController rootViewController) : base(rootViewController)
    {

    }

    public CustomNavigationController (IntPtr handle) : base (handle)
    {
    }

    public override bool ShouldAutorotate ()
    {
        return TopViewController.ShouldAutorotate();
    }

    public override UIInterfaceOrientation PreferredInterfaceOrientationForPresentation ()
    {
        return TopViewController.PreferredInterfaceOrientationForPresentation ();
    }
}

现在我可以使用

this.PresentViewController (new CustomNavigationController(myStaticTableViewController), true, null)

一切都按预期工作。