我使用的是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)
脊柱位置不是“中间”而是“最小”。有什么想法吗?
答案 0 :(得分:4)
是的,您已将UIPageViewController初始化为“Min”作为脊椎位置。但是,您需要为页面控制器实现委托并覆盖GetSpineLocation
方法:
public override UIPageViewControllerSpineLocation GetSpineLocation (UIPageViewController pageViewController, UIInterfaceOrientation orientation)
{
//return spine location according to interface orientation and whatever
//criteria you prefer
}
或者,为其GetSpineLocation
属性指定一个方法(MonoTouch天堂!):
pageViewController.GetSpineLocation = (p, o) => return <spinelocation>;
不过,它看起来有点出乎意料。我假设当设备旋转到横向时,原生pageViewController:spineLocationForInterfaceOrientation:
方法的默认实现返回“Mid”(尽管在Apple文档中找不到信息)。无论如何,你必须覆盖上面的方法才能做到正确。
答案 1 :(得分:0)
为了安全起见,我检查了UIPageViewControllerSpineLocation
的值,它们与Apple documentation的值相符。
Dimitris也是正确的,默认的内部,委托(当没有提供时)在没有指定用户提供的回调时返回UIPageViewControllerSpineLocation.Mid
(即UIPageViewController.GetSpineLocation
时未分配)。
这是自动生成的绑定代码,因此如果没有提供默认值的常量,没有提供任何内容,这有点棘手。但是,请随时打开错误报告(并链接到此问题),我们将对其进行审核。