Xcode Autolayout限制了混乱

Kyl*_*cot 1 iphone xcode interface-builder ios ios7

我有一个基于横向的视图,skView里面有一个SKView().我希望宽度skView始终是视图的100%和静态高度288.我已经添加了一些约束但是当我在模拟器中启动应用程序时它的方式给了我相同的CGSize(568 x 288),无论是否我选择iPhone 4或3.5.

- (void)viewDidLoad {
    CGSize size = self.skView.bounds.size; // 568 x 288
    ...
}
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?

我已经建立了一个示例项目来说明手头的问题 https://github.com/kyledecot/autolayout

在此输入图像描述

更新#1

一位用户建议我看看它的价值self.skView.bounds.size是什么viewWillAppear:产生了一些奇怪的结果(我不确定它们是否有用)

在此输入图像描述

更新#2

删除所有约束并重新添加它们作为一个评论者(在我发布的github示例项目中更新)建议我现在有以下(仍然破坏):

在此输入图像描述

IB中的线条是蓝色的,我的意思是没有歧义,但它似乎仍然无法正常工作.

更新#3

在收到用户的新约束matt并使用viewWillAppear而不是viewDidLoad问题后,似乎仍然普遍存在.似乎skView宽度永远不会符合view

在此输入图像描述

正如您在屏幕截图中看到的那样,文本被截断,因为在3.5英寸的iPhone上skView仍然有568的宽度(iPhone 4英寸的横向宽度).

Kas*_*nck 6

当您的视图配置代码启动时,听起来视图的约束尚未得到解决.也就是说,那时的帧与您使用自动布局约束创建的"真实"布局不对应(应该适合在skViewview).

我从移动代码viewWillAppearviewDidLayoutSubviews代替,而事实证明,在这个时候布局过程中,边界的viewskView已被更新,它似乎两个3.5"和4"个屏幕工作.

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];

    CGSize skViewSize = self.skView.bounds.size;
    SKScene *scene = [MyScene sceneWithSize:skViewSize];
    scene.scaleMode = SKSceneScaleModeAspectFill;

    [self.skView presentScene:scene];
}
Run Code Online (Sandbox Code Playgroud)

本教程可能会对该主题有所了解.

顺便说一句,我已经提交了一个拉取请求,我对您的示例存储库进行了更改,以便您可以浏览更改.