在segue之后的iOS模拟器7.1上破坏了自动布局(适用于ios 8)

时间:2015-06-26 17:09:00

标签: ios objective-c autolayout

我在带有自动布局的ios模拟器7.1上有一个非常奇怪的问题但在ios 8上一切正常。

在ios模拟器7.1上新建"查看控制器"通过segue呈现它的内容变得布局不正确,有时甚至移动。

github上的演示代码: https://github.com/Misterio26/iOS-7-Simulator-Bug-demo

此演示仅使用界面构建器,根本没有手动代码,这就是我对此错误感到非常惊讶的原因。

重现:

  • 使用xCode 6
  • 使用ios模拟器(7.1)
  • 运行
  • 按" Works",您将看到正确对齐的测试屏幕(有时不对齐),然后按"返回"
  • 按" Bug",在屏幕外观后你会注意到一些ui移动和不正确的对齐(有时它会在控制台日志中显示约束错误)

我在viewDidAppear中记录window.hasAmbiguousLayout,并打印" false"对于iOS 8和" true"对于iOS 7.看起来iOS7为呈现视图控制器创建了错误的约束。我使用" po [[UIWindow keyWindow] _autolayoutTrace];"它证实了我的建议。

我不能相信只有我注意到这个问题。

有人可以帮助我知道:

它是模拟器错误还是它也发生在真实设备上? (我没有ios 7设备,只有8,苹果不允许降级ios)

或许它可以修复?

或者您只能尝试重现该窗口.hasAmbiguousLayout变为" true"在segue之后(我认为这是非常危险的错误):

  • 在XCode6中创建新的iOS项目
  • IB中的
  • 使用一个按钮创建新的View Controller
  • IB中的
  • 使用任何内容创建第二个View Controller
  • IB中的
  • 创建"显示"从按钮切换到第二个视图控制器(命令+从按钮拖动到第二个视图控制器)
  • CODE中的
  • 创建新类@interface CustomViewController:UIViewController
  • CODE中的
  • 添加到CustomViewController

     - (void)viewDidAppear:(BOOL)animated {
      UIWindow* window = [UIApplication sharedApplication].keyWindow;
      NSLog(@"viewDidAppear hasAmbiguousLayout %@", ([window hasAmbiguousLayout] ? @"true" : @"false"));
     }
    
  • IB中的
  • 将类CustomViewController应用于第二个视图控制器

  • 在ios 8上运行,你会看到" viewDidAppear hasAmbiguousLayout false"
  • 在ios模拟器7.1上运行,您将看到" viewDidAppear hasAmbiguousLayout true"

我认为这是非常危险的行为。

0 个答案:

没有答案