iPad:UIPageViewController导航方向

6
当我改变我的UIViewController的方向时,我希望UIPageViewControllernavigationOrientation也随之改变。也就是说,当设备旋转到竖直方向时,我希望navigationOrientationUIPageViewControllerNavigationOrientationVertical更改为UIPageViewControllerNavigationOrientationHorizontal
我尝试在视图控制器旋转时设置navigationOrientation属性,但我发现navigationOrientation属性是只读的。
以下是我想要的图片。
横屏视图 Landscape View 竖屏视图 enter image description here 我该怎么办?

你应该在xib中使用autoresize。 - vishiphone
@vishiphone:自动调整大小如何帮助他的问题?你明白他想要将页面的分割从垂直变为水平吗? - Parth Bhatt
@ParthBhatt 我认为他只是想像方向一样旋转视图,因为他的图片和问题都是这样的。 - vishiphone
他将展示肖像和风景视图的图像。 - vishiphone
2个回答

3

很好的问题。

不知道为什么,但是似乎苹果不希望你更改该属性。可能是技术原因或某种UI指导方针。

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

顺便说一下,您是否查看了委托的pageViewController:spineLocationForInterfaceOrientation:方法。似乎苹果对设备方向变化的首选反应方式就是这个方法:

讨论 使用此方法更改脊柱位置时,设备方向发生更改, 以及设置新的视图控制器和更改双面状态。

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

请注意,苹果的日历应用程序在纵向模式下使用非常窄的页面-似乎确实是他们的UI理念。


可以通过删除 "if (UIInterfaceOrientationIsPortrait(orientation))" 实现类似苹果日历的视图。 - Mitul Nakum
不太清楚你的意思,但是日历应用程序确实会对设备方向变化做出反应。当设备旋转时,它会为每个页面更改视图(控制器)。你可以通过月度概览从左到右翻页来看到这一点。 - Kai Huppmann
@Devang 嗨 Devang,我需要和你的需求类似的东西。我正在将五个视图控制器添加到数组中,并使用页面视图控制器在屏幕上同时显示两个视图,就像你在第一张图片中所做的那样。我的应用程序是固定的横向视图。我的要求是,在显示四个视图控制器后,它将在横向模式下显示单个视图控制器。你能为此指导我吗?我的其他功能都已完成,只有这一部分我还没有解决。 - iPhone Programmatically

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接