首页 文章

UIViewController加载旋转到横向但仅支持纵向

提问于
浏览
2

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

这个特殊的UIViewController只适用于Portrait模式(它是一个颜色选择器),因此shouldAutorotateToInterfaceOrientation中的代码:仅对纵向方向返回YES . 如果您在视图已加载时转动手机,它可以正常工作,它会保持纵向状态,但如果在加载视图的NIB时手机已处于横向状态,则无效 .

当加载ViewController时,屏幕已处于横向方向,视图采用纵向布局,视图的下半部分为截止 . 我尝试提出横向布局,但分段控制是一个问题 .

EDIT - 我尝试在viewWillAppear中使用setStatusBarOrientation,但它只影响状态栏,导航栏和视图仍然针对横向旋转 .

这种情况发生在iPhone上的3.1.3和4.0 .

4 回答

  • 0

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

  • 1

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

    @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
    
  • 6

    在正常情况下,当显示新的 UIViewController 时,如果它仅支持纵向且应用程序当前处于横向状态,它应自动旋转为纵向 . 这仅适用于较新版本的操作系统(但我认为你可能在3.1.3上运行?) .

    在任何情况下,强制应用程序成为肖像:

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

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

    我建议你为你的颜色选择器添加一个横向模式 .

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

相关问题