Почему ограничения автоматического макета не установлены должным образом, когда мое приложение загружается в разделенном экране? - PullRequest
0 голосов
/ 04 мая 2020

Ограничения Auto Layout работают для моего приложения на iPad, если оно загружается в полноэкранный режим.

Когда я go в разделенном экране, все меняется, как и ожидалось.

При изменении размера разделенного экрана вызывается метод - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator>)coordinator.

Однако , если я загружаю приложение в разделенном экране , ограничения неверны из начало.

Кроме того, при изменении размера чего-либо, кроме полноэкранного, - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator>)coordinator не вызывается.

Вот видео, демонстрирующее проблему. https://www.youtube.com/watch?v=ksHt8pIz0b0

Я использую масонство для установки ограничений следующим образом:

    [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);
    }];

Заранее благодарен за помощь!

ОБНОВЛЕНИЕ: Я создал приложение fre sh и установил те же ограничения. Когда я запускал тот же тестовый сценарий, он загрузился нормально в режиме разделенного экрана. Однако в тестовом сценарии viewWillTransitionToSize: был правильно вызван при изменении размера экрана после загрузки в разделенном экране.

Есть какие-нибудь идеи о том, что может помешать этому вызову в моем приложении при загрузке в разделенном экране? Приложение огромно, поэтому я ищу общие указания по поиску go.

1 Ответ

0 голосов
/ 04 мая 2020

После создания пустого приложения с указанными мною ограничениями и обнаружения его работоспособности, как и ожидалось, я понял, что в моем коде определенно есть что-то, что нарушает намеченное поведение.

Оказывается, именно это строка в AppDelegate

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

Это должно было быть с ранних дней до того, как я использовал AutoLayout.

Я сомневаюсь, что у кого-то возникнут те же проблемы, что и у меня, но на всякий случай обязательно следите за такими вещами!

...