iOS 7中具有多个viewcontrollers / views的屏幕中的错误方向,仅限横向(iOS 8很好)

时间:2014-10-31 23:59:23

标签: ios orientation ecslidingviewcontroller

我正在使用TheSidebarController实现向iOS应用程序添加滑动菜单。这是我正在使用的库,但是我在其他库中发现了同样的问题,比如ECSlidingViewController等。它们基本上是通过将多个视图控制器添加到包含的视图控制器上来实现的,没什么太疯狂的。

问题是,当您将应用程序设置为横向应用程序时,容器中的所有屏幕 - 菜单,内容屏幕 - 似乎都认为它们处于纵向模式,并在中途被切断。您可以在此屏幕截图中看到表格被截断的问题: http://imgur.com/xD5MUei

我一直试图以任何方式让这个工作,而且没有运气 我正在使用的库+示例项目可以在这里找到: https://github.com/jondanao/TheSidebarController

非常感谢任何帮助:)

编辑:人们说我可以伸出桌子使其看起来正常,但这只是掩盖了潜在的问题,即应用程序和/或屏幕仍然认为它们是纵向的。作为一个简单的例子,如果我采用示例项目,并在LeftViewController中替换以下代码:

- (void)dismissThisViewController
{
  UIViewController* vc = [[UIViewController alloc] init];
  UINavigationController* pulldown = [[UINavigationController alloc] initWithRootViewController:vc];

  pulldown.view.frame = CGRectMake(pulldown.view.frame.origin.x, -[[UIApplication sharedApplication] delegate].window.frame.size.height,
                                   pulldown.view.frame.size.width, pulldown.view.frame.size.height);
  [[[UIApplication sharedApplication] delegate].window addSubview:pulldown.view];

  [UIView animateWithDuration:.5 animations:^{
    pulldown.view.frame = CGRectMake(pulldown.view.frame.origin.x, 0,
                                     pulldown.view.frame.size.width, pulldown.view.frame.size.height);
  } completion:^(BOOL finished) {
    ;
  }];
}

viewcontroller是横向的,而不是从顶部。

4 个答案:

答案 0 :(得分:2)

这是一个奇怪的...我必须设置内容视图控制器的框架,这是有道理的,但每次内容刷新时我都必须重置它:

- (void)setContentViewController:(UIViewController *)contentViewController
{
    // Old View Controller
    UIViewController *oldViewController = self.contentViewController;
    [oldViewController willMoveToParentViewController:nil];
    [oldViewController.view removeFromSuperview];
    [oldViewController removeFromParentViewController];

    // New View Controller
    UIViewController *newViewController = contentViewController;
    [self.contentContainerViewController addChildViewController:newViewController];
    [self.contentContainerViewController.view addSubview:newViewController.view];
    [newViewController didMoveToParentViewController:self.contentContainerViewController];

    _contentViewController = newViewController;
    if ([DeviceDetection isDeviceiPad]) {
      _contentViewController.view.frame = CGRectMake(0, 0, 1024, 768);
    }
}

答案 1 :(得分:0)

您是否检查过它是否与新的界面方向有关?

https://developer.apple.com/library/ios/releasenotes/General/WhatsNewIniOS/Articles/iOS8.html 章节 - >支持新的屏幕尺寸和比例

答案 2 :(得分:0)

CenterViewController.h 中,使该类成为UITableViewController的子类。

然后在 CenterViewController.m 中注释掉[self.view addSubview:self.tableView];

完成!

答案 3 :(得分:0)

centerViewController.m中,当您创建表格视图时,请添加以下行:

self.tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth;