在仅纵向应用程序中以横向模式添加子视图

Posted

技术标签:

【中文标题】在仅纵向应用程序中以横向模式添加子视图【英文标题】:Add SubView in Landscape mode in Portrait only app 【发布时间】:2013-03-19 13:00:51 【问题描述】:

我的应用是仅纵向应用。我需要在横向模式下添加一个子视图。对于要添加的新视图,我在 ios 6 中设置了以下方向。

-(NSUInteger)supportedInterfaceOrientations

    NSUInteger options = UIInterfaceOrientationMaskAll;

    if (self.inAppBrowserOrientation)
     
        if (self.inAppBrowserOrientation == UIInterfaceOrientationLandscapeLeft || self.inAppBrowserOrientation == UIInterfaceOrientationLandscapeRight)
        options = UIInterfaceOrientationMaskLandscape;
        return options;
    

视图将以纵向模式添加。在定向时,此视图将仅在横向模式下旋转,这是预期的。

第一次添加视图时,为什么要在纵向模式下添加?而self.inAppBrowserOrientationUIInterfaceOrientationLandscapeRight

【问题讨论】:

用 else 部分也试试。写 return UIInterfaceOrientationMaskLandscape;在其他部分也。 【参考方案1】:
- (void)viewDidAppear:(BOOL)animated
 
    [super viewDidAppear:animated];

    [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft animated:NO];
    CGAffineTransform landscapeTransform = CGAffineTransformMakeRotation(degreesToRadian(270));
    landscapeTransform = CGAffineTransformTranslate (landscapeTransform, 0.0, 0.0);
    [[self navigationController].view setTransform:landscapeTransform];
    self.navigationController.view.bounds = CGRectMake(0.0, 0.0, 480, 320);
    self.navigationController.navigationBar.frame = CGRectMake(0.0, 20.0, 480, 44.0);


 

-(void)viewWillDisappear:(BOOL)animated

    [super viewWillDisappear:animated];   

    [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait animated:NO];
    CGAffineTransform landscapeTransform = CGAffineTransformMakeRotation(degreesToRadian(0));
    landscapeTransform = CGAffineTransformTranslate (landscapeTransform, 0.0, 0.0);
    [[self navigationController].view setTransform:landscapeTransform];
    self.navigationController.view.bounds = CGRectMake(0.0, 0.0, 320, 480);
    self.navigationController.navigationBar.frame = CGRectMake(0.0, 20.0, 320.0, 44.0);


这里,默认方向是纵向,但是当编译器转到 viewDidAppear 时,它将旋转 270 度,因此处于横向模式.. 相应地调整帧大小...

祝你好运!!

【讨论】:

【参考方案2】:

试试下面的sn-p

-(NSUInteger)supportedInterfaceOrientations

    NSUInteger options = UIInterfaceOrientationMaskAll;

    if (self.inAppBrowserOrientation)
     
        if (self.inAppBrowserOrientation == UIInterfaceOrientationLandscapeLeft || self.inAppBrowserOrientation == UIInterfaceOrientationLandscapeRight)
        options = UIInterfaceOrientationMaskLandscape;
        return options;
    
    else
    
        return UIInterfaceOrientationMaskLandscape;
    

我不确定,但可能在您第一次加载 aqpp 时会出现问题

享受编程!

【讨论】:

仍将视图添加为纵向。由于self.inAppBrowserOrientation是UIInterfaceOrientationLandscapeRight,所以每次只会返回UIInterfaceOrientationMaskLandscape。 你检查调试点了吗?第一次加载视图时,在 viewWillAppear 之后,supportedInterfaceOrientations 会发生什么? po self.inAppBrowserOrientation $0 = UIInterfaceOrientationLandscapeRight [没有可用的 Objective-C 描述] 尝试添加这一行 [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];在视图的 viewDidLoad 方法中,如果完成,则将其应用于每个屏幕都支持的方向

以上是关于在仅纵向应用程序中以横向模式添加子视图的主要内容,如果未能解决你的问题,请参考以下文章

从纵向模式旋转到横向模式时不调整子视图

添加子视图时,如果应用程序处于横向模式,则视图不会调整大小

尝试在 iOS 8 中以横向模式而不是纵向模式显示键盘

在 phonegap 应用程序中以编程方式设置纵向或横向

UIWindow 在仅横向应用程序中出现在纵向

如何在仅纵向应用程序中使用 MPMovieViewController 播放横向视频