我已经使用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
。也许这就是它不尊重界面方向的原因。我有什么解决方案?
答案 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)
一切都按预期工作。