Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# N旋转时UIPageViewController的内部一致性异常_C#_Ios_Cocoa Touch_Xamarin.ios_Uipageviewcontroller - Fatal编程技术网

C# N旋转时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

我使用的是Monotouch 5.2.6和iOS SDK 5.0.1

我有一个UIPageViewController,它是另一个视图控制器的子容器。 它是这样创建的:

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>;