在横向模式下从iPhone 6 Plus主屏幕启动为纵向模式会导致错误的方向

2020/12/01 01:11 · ios ·  · 0评论

这个问题的实际标题比我可能适合的更长:

如果启动的应用程序的根视图控制器仅支持纵向方向,但在主屏幕为横向时在iPhone 6 Plus上支持横向方向,则该应用程序会处于边缘状态,即应用程序的窗口处于横向方向,但设备处于以纵向方向。

简而言之,它看起来像这样:

应该看起来像这样的时候:

重现步骤:

  1. 运行iOS 8.0的iPhone 6 Plus。

  2. 一个应用,其plist支持所有但纵向反转的方向。

  3. 该应用程序的根视图控制器是UITabBarController。

  4. 一切,标签栏控制器及其所有后代子视图控制器返回UIInterfaceOrientationMaskPortraitsupportedInterfaceOrientations

  5. 从iOS主屏幕开始。

  6. 旋转为横向(需要iPhone 6 Plus)。

  7. 冷启动该应用程序。

  8. 结果:界面方向损坏。

除了完全禁用横向之外我没有其他强制纵向方式的方法,而我不能这样做:我们的Web浏览器模态视图控制器需要横向。

我什至尝试对UITabBarController进行子类化并覆盖supportedInterfaceOrientations以返回仅肖像的蒙版,但这(即使使用了上述所有其他步骤)也未能解决问题。


这是显示该错误的示例项目的链接。


在iPhone 6 Plus上横向启动我们的应用程序时,我遇到了同样的问题。

我们的修复程序是通过项目设置从plist中删除横向支持的界面方向:

移除横向

并在应用程序委托中实现application:supportedInterfaceOrientationsForWindow:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
    return UIInterfaceOrientationMaskAllButUpsideDown;
}

显然,您的plist中的信息用于指定允许您的应用启动的方向。

设置statusBarOrientationUIApplication,似乎为我工作。我将其放在application:didFinishLaunchingWithOptions:应用程序委托方法中。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    application.statusBarOrientation = UIInterfaceOrientationPortrait;

    // the rest of the method
}

使用UITabBarController作为根视图控制器时,这似乎是iOS 8中的错误。一种解决方法是使用主要是普通UIViewController的根视图控制器。此原始视图控制器将用作选项卡栏控制器的父视图控制器:

///------------------------
/// Portrait-Only Container
///------------------------

@interface PortraitOnlyContainerViewController : UIViewController

@end

@implementation PortraitOnlyContainerViewController

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait;
}

@end

// Elsewhere, in app did finish launching ...

PortraitOnlyContainerViewController *container = nil;

container = [[PortraitOnlyContainerViewController alloc] 
              initWithNibName:nil 
              bundle:nil];

[container addChildViewController:self.tabBarController];
self.tabBarController.view.frame = container.view.bounds;
[container.view addSubview:self.tabBarController.view];
[self.tabBarController didMoveToParentViewController:container];

[self.window setRootViewController:container];

我只希望我的应用以横向模式打开(而不出现您在iPhone 6 Plus上描述的问题),因此我将设置为,Landscape (left home button)并将Landscape (right home button)设置为应用的PLIST文件中唯一的方向。当我的应用打开时,这可以解决定向问题。但是,仅当我UIImagePickerController在应用程序中显示时,我才需要我的应用程序支持一个视图的纵向模式,而Apple需要在iPhone上以纵向模式显示该视图

通过在以下代码中包含以下代码,我能够仅在一个视图中支持纵向视图,同时保持我的应用以横向模式打开AppDelegate

-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {

        return UIInterfaceOrientationMaskAllButUpsideDown;

    } else {

        return UIInterfaceOrientationMaskAll;

    }

}

我有一个非常类似的问题。除了播放视频外,我想在所有地方强制使用人像模式。

我所做的是:

1)在AppDelegate中强制将应用方向设为纵向:

-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
    if ([window.rootViewController.presentedViewController isKindOfClass:[MPMoviePlayerViewController class]])
    {
        return UIInterfaceOrientationMaskAll;
    }
    return UIInterfaceOrientationMaskPortrait;
}

2)启动空模式视图控制器解决了我的问题。我在位于NavigationViewController根目录(应用程序启动后可见的第一个视图控制器)的第一个视图控制器的viewDidLoad中启动它:

- (void)showAndHideNamelessViewControllerToFixOrientation {
    UIViewController* viewController = [[UIViewController alloc] init];
    [self presentViewController:viewController animated:NO completion:nil];
    [viewController dismissViewControllerAnimated:NO completion:nil];
}

请尝试以下代码。此问题可能是由横向启动时的键窗口大小引起的。

// in application:didFinishLaunchingWithOptions: ...

self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
[self.window setFrame:[[UIScreen mainScreen] bounds]]; //<- ADD!!

对于我来说,Jared使用通用容器视图控制器的解决方法不走运。我已经用supportedInterfaceOrientations对选项卡栏控制器进行了子类化,也没有运气。无论启动后6+的方向如何,选项卡栏的窗口都会报告frame = (0 0; 736 414)

到目前为止,我发现的唯一解决方法是在makeKeyAndVisible之后强制窗口框架

[self.window makeKeyAndVisible];
self.window.frame = CGRectMake(0, 0, MIN(CGRectGetWidth(self.window.frame), CGRectGetHeight(self.window.frame)), MAX(CGRectGetWidth(self.window.frame), CGRectGetHeight(self.window.frame)));

我在我的应用程序上遇到了相同的错误,我通过此解决方案弄清楚了

首先,它不起作用,但是经过一番挖掘之后,我必须在启动屏幕之后在初始控制器上进行操作。

答案是OjbC语言,让我将其更新为Swift

override var shouldAutorotate: Bool {
    return true
}

override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
    return .portrait
}

不要忘记,这应该在初始视图控制器上进行。

就我自己而言,我遇到了与jaredsinclair相同的问题,但是UIViewControllersupportedInterfaceOrientations方法子类化a并不能解决问题。取而代之的是,我按照他的appDidFinishLaunching方法完全按照他的方法去做AppDelegate并且将我UITabBarController的孩子作为普通人UIViewController而不是他的子类添加进来,并且有效!

我处于相同的情况,对我来说[self.window setFrame:...]不起作用。

我发现唯一在工作结束时添加以下内容:didFinishLaunchingWithOptions。它使屏幕闪烁,并且不是完全干净有效。

我在application:didFinishLaunchingWithOptions的末尾添加了此代码:

UIViewController *portraitViewController = [[UIViewController alloc] init];
UINavigationController* nc = [[UINavigationController alloc] initWithRootViewController:portraitViewController];
[self.navController presentViewController:nc animated:NO completion:nil];
[self.navController dismissViewControllerAnimated:NO completion:nil];  
[UIViewController attemptRotationToDeviceOrientation];

我有一个类似的问题,我的应用程序使用UITabBarController作为根视图控制器以横向和纵向运行。

每当在横向模式下启动应用程序时,视图均不正确。

我需要做的所有事情:-在XIB中删除rootview控制器分配。-应用启动后手动添加:


  • (void)applicationDidFinishLaunching:(UIApplication *)application {application.statusBarHidden = YES;

    [self.window setRootViewController:self.tabBarController];


这解决了问题。

只需删除info.plist中您想要的(我只需要Portrait)以外的所有受支持界面方向的项目,它将对我有用在此处输入图片说明

只需调用[应用程序setStatusBarOrientation:UIInterfaceOrientationPortrait动画:NO];在应用程序委托方法中-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

实际上,启动后设备现在是UIInterfaceOrientationPortrait,如果您触摸inputField,则键盘是纵向布局

本文地址:http://ios.askforanswer.com/zaihengxiangmoshixiacongiphone-6-pluszhupingmuqidongweizongxiangmoshihuidaozhicuowudefangxiang.html
文章标签: ,   ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!