为什么我的应用程序在拆分屏幕中加载时自动布局约束未正确安装?

问题描述 投票:0回答:1

[自动版式限制条件适用于我在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);
    }];

感谢您的帮助!

UPDATE:我构建了一个新的应用程序并安装了相同的约束。当我运行相同的测试方案时,它在分屏模式下加载正常。但是,在测试方案中,在拆分屏幕中加载后更改屏幕大小时,正确调用了viewWillTransitionToSize:

关于在分屏中加载时可能阻止其在我的应用程序中调用的任何想法?该应用程序非常庞大,因此我正在寻找要搜索的一般说明。

ios objective-c xcode autolayout
1个回答
0
投票

在仅创建了我提到的约束的空应用程序后,发现它按预期运行,我意识到我的代码中肯定有某些东西在破坏预期的行为。

事实证明是AppDelegate中的这一行

self.window.frame = [[UIScreen mainScreen] bounds];

必须是早在使用AutoLayout之前的时间。

我怀疑有人会遇到和我一样的问题,但以防万一,请务必注意类似的事情!

© www.soinside.com 2019 - 2024. All rights reserved.