【问题标题】:UIViewController loads rotated to landscape but only supports portraitUIViewController 加载旋转到横向,但只支持纵向
【发布时间】:2011-03-06 10:14:56
【问题描述】:

即使父视图控制器(和手机)处于横向,是否有办法以纵向加载仅纵向视图控制器?

这个特殊的 UIViewController 只适合纵向模式(它是一个颜色选择器),因此 shouldAutorotateToInterfaceOrientation: 中的代码仅针对纵向返回 YES。如果您在视图已经加载时转动手机,它会保持纵向,但如果在加载视图的 NIB 时手机已经处于横向状态,这将无济于事。

当加载 ViewController 时屏幕已经处于横向时,视图处于纵向布局并且视图的下半部分被截断。我试着想出一个横向布局,但分段控件是个问题。

编辑 - 我尝试在 viewWillAppear 中使用 setStatusBarOrientation 但它只影响状态栏,导航栏和视图仍会为横向旋转。

这发生在 iPhone 上的 3.1.3 和 4.0 中。

【问题讨论】:

  • 我不是唯一遇到这个问题的人,之前的问题(如herehere)都没有有用的答案。 This one 表示无法完成。这只是我们必须忍受的限制吗?

标签: iphone uiviewcontroller orientation


【解决方案1】:

如果它适用于您的应用,您可以考虑改用模态视图控制器。呈现模态视图控制器的 IIRC 确实可以正确处理旋转。

【讨论】:

  • 宾果游戏!那行得通,它被定向并以纵向布局。没有导航栏,但很容易处理。
【解决方案2】:

在此示例中,我希望视图以横向模式启动,即使它是从纵向模式推送的。


@implementation MyView
-(void)layoutSubviews {
    // Set subview frames here
    switch ([UIDevice currentDevice].orientation) {
        case UIDeviceOrientationUnknown:
        case UIDeviceOrientationPortrait:
        case UIDeviceOrientationPortraitUpsideDown:
        case UIDeviceOrientationFaceUp:
        case UIDeviceOrientationFaceDown:
            self.transform = CGAffineTransformMakeRotation(M_PI/2.0);
            self.transform = CGAffineTransformTranslate(self.transform, -80.0f, 80.0f);
            break;
        case UIDeviceOrientationLandscapeLeft:
        case UIDeviceOrientationLandscapeRight:
            self.transform = CGAffineTransformIdentity;
            break;
    }
}
@end

@implementation MyController -(void)willAnimateSecondHalfOfRotationFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation duration:(NSTimeInterval)duration { [self.view setNeedsLayout]; } @end

【讨论】:

    【解决方案3】:

    在正常情况下,当显示一个新的UIViewController时,如果它只支持纵向并且应用程序当前是横向的,它应该会自动旋转到纵向。这仅适用于较新版本的操作系统(但我假设您可能在 3.1.3 上运行?)。

    无论如何,强制应用进入纵向:

    [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait animated:YES];
    

    【讨论】:

    • 我试过了,但它不起作用。它移动了状态栏,但导航栏仍然在错误的位置,并且视图仍在旋转。
    • 导航控制器如何显示?它是最初添加到窗口的根视图控制器吗?还是以其他方式呈现?所有的父视图控制器都支持旋转到纵向吗?导航控制器上的颜色选择器是如何显示的?它是根视图还是推送到现有控制器?
    • 导航控制器是应用委托中添加的根VC。除了这个之外,所有的视图控制器都支持纵向和横向。颜色选择器通过在导航控制器上调用 pushViewController:animated: 来显示。按下颜色选择器时,根视图控制器和父视图控制器处于横向。
    【解决方案4】:

    我认为不可能将纵向视图控制器推送到已经处于横向模式的导航控制器。
    试着想象它的动画(导航栏)...

    我建议您为颜色选择器添加横向模式。

    另一种解决方案可能是在横向模式下进入颜色选择器时旋转整个视图。
    您可以通过[[UIDevice currentDevice] orientation]获取当前方向。

    【讨论】:

    • 您可能是对的,但是如果您从横向视图中推送 UIImagePickerController(仅支持纵向),它会正确设置动画并在带有导航栏的纵向选择器中滑动。也许他们正在使用内部 API 来完成此操作,或者这可能与 UIImagePickerController 也是 UINavigationController 的事实有关。
    猜你喜欢
    • 2013-07-02
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多