ios - 当我的应用分屏加载时,为什么没有正确安装自动布局约束?
问题描述
如果它加载全屏,自动布局约束适用于我在 iPad 上的应用程序。
当我进入分屏时,一切都按预期改变。
当分屏大小改变时,- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator>)coordinator
调用该方法。
但是,如果我在分屏中加载应用程序,则约束从一开始就不正确。
此外,当调整到全屏以外的任何内容时,- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator>)coordinator
不会调用 。
这是一个演示问题的视频。https://www.youtube.com/watch?v=ksHt8pIz0b0
我正在使用 Masonry 安装约束,如下所示:
[labelLeft remakeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.view.left);
make.centerY.equalTo(self.view.centerY);
make.width.equalTo(150);
make.height.equalTo(30);
}];
[labelRight remakeConstraints:^(MASConstraintMaker *make) {
make.right.equalTo(self.view.right);
make.centerY.equalTo(self.view.centerY);
make.width.equalTo(150);
make.height.equalTo(30);
}];
[labelTop remakeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(self.view.centerX);
make.top.equalTo(self.view.top);
make.width.equalTo(150);
make.height.equalTo(30);
}];
[labelBottom remakeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(self.view.centerX);
make.bottom.equalTo(self.view.bottom);
make.width.equalTo(150);
make.height.equalTo(30);
}];
在此先感谢您的帮助!
更新:
我构建了一个新的应用程序并安装了相同的约束。当我运行相同的测试场景时,它在分屏模式下加载正常。但是,在测试场景中,viewWillTransitionToSize:
在分屏加载后更改屏幕大小时会正确调用 。
关于在分屏中加载时可能阻止在我的应用程序中调用它的任何想法?该应用程序很大,所以我正在寻找一般的搜索方向。
解决方案
在创建了一个只包含我提到的约束的空应用程序并发现它按预期工作后,我意识到我的代码中肯定有一些东西破坏了预期的行为。
原来是 AppDelegate 中的这一行
self.window.frame = [[UIScreen mainScreen] bounds];
这一定是在我使用 AutoLayout 之前的早期。
我怀疑有人会遇到和我一样的问题,但以防万一,一定要注意这样的事情!
推荐阅读
- excel - 为什么我的代码在从开发人员窗格运行时可以正确执行,但在使用按钮运行时却不能正确执行?
- java - 我可以添加一个包含 jar 及其依赖 jar 的目录作为 maven 依赖项吗?
- windows - 从 Docker 容器访问 Windows 文件共享(域)中的人工制品
- python - 将 C 库添加到 c++11 distutils 项目
- angular - 为什么 Angular 只评估第一条路线?
- spring - 如何在自定义 AuthenticationFailureHandler 中返回由具体派生 AuthenticationException 类型解析的不同错误消息
- git - Git以错误的顺序提交日志信息
- angular - 升级到 Angular 9 后,在扩展通用 Firestore 服务时出现错误
- c# - C# windows 窗体按钮执行 SQL Query
- python - 从python中的xml读取列表中的数据