6

我希望我的 navigationOrientationUIPageViewController在我更改我的UIViewController. 也就是说,当设备旋转到纵向时,我希望将navigationOrientation更改UIPageViewControllerNavigationOrientationVerticalUIPageViewControllerNavigationOrientationHorizontal

我尝试navigationOrientation在视图控制器的旋转上设置属性,但我发现该navigationOrientation属性是只读的。

这是我想要的图像。

横向视图 横向视图

纵向视图 在此处输入图像描述

我该怎么办 ?

4

2 回答 2

3

好问题。

不知道为什么,但似乎 Apple 不希望您更改该属性。无论是技术原因还是某种 UI 指南。

无论如何,如果你不能改变方向,你应该采用不同的方法并使用两个 UIPageViewControllers,每个都有另一个导航方向,它们共享一个委托。在设备转动时,您隐藏/显示相应的视图,或者您在每个设备转动时初始化/释放一个新对象。

顺便提一句。你有没有看一下pageViewController:spineLocationForInterfaceOrientation:委托的方法。似乎 Apple 对设备方向变化做出反应的首选方式是这样的:

讨论当设备方向改变时,使用这个方法来改变脊椎位置,以及设置新的视图控制器和改变双面状态。

仅当过渡样式为 时才调用此方法 UIPageViewControllerTransitionStylePageCurl

请注意,Apple 的日历应用程序带有非常纤薄的纵向页面 - 似乎真的是他们对 UI 的想法。

于 2012-05-03T11:52:43.693 回答
0

我以稍微不同的方式解决了这个问题,我继承了 UIPageViewController 类并覆盖了 initWithCoder,如下所示:

- (id)initWithCoder:(NSCoder *)aDecoder
{
    NSDictionary *options = nil;

    if ([self isLandscapeOrientation])
    {
        options = [NSDictionary dictionaryWithObject:[NSNumber numberWithInteger:UIPageViewControllerSpineLocationMid] forKey:UIPageViewControllerOptionSpineLocationKey];
    }

    self = [super initWithCoder:aDecoder];

    return [super initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:options];
}

- (BOOL)isLandscapeOrientation
{
    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];

    return UIInterfaceOrientationIsLandscape(orientation);
}
于 2012-05-15T19:03:15.383 回答