5

我在 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) 与请求的脊椎位置 (UIPageViewControllerSpineLocationMid) 所需的数量 (2) 不匹配

脊椎位置不是“中间”而是“最小”。有任何想法吗?

4

2 回答 2

4

没错,您已经使用“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 天堂!):

pageViewController.GetSpineLocation = (p, o) => return <spinelocation>;

尽管如此,它看起来还是有点出人意料的行为。我假设pageViewController:spineLocationForInterfaceOrientation:当设备旋转到横向时,本机方法的默认实现返回“Mid”(尽管在 Apple 文档中找不到信息)。无论如何,您必须重写上述方法才能使其正确。

于 2012-03-16T10:57:08.930 回答
0

为了安全起见,我检查了 的值UIPageViewControllerSpineLocation,它们与 Apple文档的值相匹配。

Dimitris 也是正确的,默认的internal,委托(当没有提供时)UIPageViewControllerSpineLocation.Mid在未指定用户提供的回调时(即UIPageViewController.GetSpineLocation未分配时)返回。

这是自动生成的绑定代码,因此不为默认值返回常量有点棘手,没有提供任何情况。但是,请随时打开错误报告(并链接到这个问题),我们会看看它。

于 2012-03-16T12:33:03.607 回答