C# N旋转时UIPageViewController的内部一致性异常
我使用的是Monotouch 5.2.6和iOS SDK 5.0.1 我有一个UIPageViewController,它是另一个视图控制器的子容器。 它是这样创建的:C# N旋转时UIPageViewController的内部一致性异常,c#,ios,cocoa-touch,xamarin.ios,uipageviewcontroller,C#,Ios,Cocoa Touch,Xamarin.ios,Uipageviewcontroller,我使用的是Monotouch 5.2.6和iOS SDK 5.0.1 我有一个UIPageViewController,它是另一个视图控制器的子容器。 它是这样创建的: pageViewController = new UIPageViewController (UIPageViewControllerTransitionStyle.PageCurl, UIPageViewControllerNavigationOrientation.Horizontal, UIPageViewControll
pageViewController = new UIPageViewController (UIPageViewControllerTransitionStyle.PageCurl, UIPageViewControllerNavigationOrientation.Horizontal, UIPageViewControllerSpineLocation.Min);
this.AddChildViewController (pageViewController);
pageViewController.DidMoveToParentViewController (this);
this.viewCurrentMode.AddSubview (pageViewController.View);
如果我旋转设备(模拟器),我会在UIApplication.SendEvent()
中得到此异常:
抛出Objective-C异常。名称:NSInternalInconsistencyException
原因:提供的视图控制器(1)的数量与
请求的脊椎位置所需的编号(2)
(UIPageViewControllerSpineLocationMid)
脊椎位置不是“中间”,而是“最小”。有什么想法吗?没错,您已经用“Min”作为脊椎位置初始化了UIPageViewController。但是,您需要为页面控制器实现一个委托,并重写
GetSpineLocation
方法:
public override UIPageViewControllerSpineLocation GetSpineLocation (UIPageViewController pageViewController, UIInterfaceOrientation orientation)
{
//return spine location according to interface orientation and whatever
//criteria you prefer
}
或者,将方法分配给其GetSpineLocation
属性(MonoTouch heaven!):
pageViewController.GetSpineLocation=(p,o)=>返回;
不过,这看起来有点出乎意料。我假设本机
pageViewController:spineLocationForInterfaceOrientation:
方法的默认实现在设备旋转到横向时返回“Mid”(尽管在Apple文档中找不到信息)。无论如何,您必须重写上述方法才能正确执行。为了安全起见,我检查了UIPageViewControllerSpineLocation
的值,它们与Apple的值匹配
Dimitris也是正确的,当未指定用户提供的回调(即未分配UIPageViewController.GetSpineLocation
时),默认的internal委托(未提供委托)返回UIPageViewControllerSpineLocation.Mid
这是自动生成的绑定代码,所以不返回默认值(未提供任何内容)的常量有点棘手。不过,请随意打开一个bug报告(并链接到这个问题),我们会看看它。也许我应该买你的书,尽管我认为自己是一个有经验的MT开发者!呵呵,书总是有用的…!)
pageViewController.GetSpineLocation = (p, o) => return <spinelocation>;