TraitCollectionDidChange ведет себя иначе для iphone X

В моем случае я меняю свои макеты представления в зависимости от traitCollection.horizontalSizeClass Вот мой фрагмент кода.

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
        super.traitCollectionDidChange(previousTraitCollection)

        if traitCollection.horizontalSizeClass == .regular {
            // 2
            NSLayoutConstraint.deactivate(compactConstraints)
            NSLayoutConstraint.activate(regularConstraints)
            // 3
            socialMediaView.axis = .horizontal
        } else {
            // 4
            NSLayoutConstraint.deactivate(regularConstraints)
            NSLayoutConstraint.activate(compactConstraints)
            socialMediaView.axis = .vertical
        }
    }

Все работает, как указано в iphone 7 plus и iphone x в портретном режиме Screen_Shot_2018-08-07_at_1.44.54_PM.png и в ландшафтном режиме я хочу, чтобы изображение кролика было слева, а стек всех осей socialMedias был горизонтальным
но в ландшафтном режиме iphone X он не появится, а в телефоне 7 появится. Посмотрите на скриншоты ниже < a href="https://postimg.cc/image/7gyq7vtx3/" rel="nofollow noreferrer">Screen_Shot_2018-08-07_at_1.32.02_PM.png


person Shakti    schedule 07.08.2018    source источник
comment
какой у Вас вопрос? это совершенно неясно   -  person Bhavin Kansagara    schedule 07.08.2018
comment
Посмотрите, ответ помогает: заголовок stackoverflow.com/questions/37163539/   -  person Bhavin Kansagara    schedule 07.08.2018
comment
@BhavinKansagara, я обновил свой вопрос, пожалуйста, проверьте один раз и дайте мне знать о любых разъяснениях, которые вы хотите   -  person Shakti    schedule 07.08.2018


Ответы (1)


Глядя на ваш вопрос и состояние, я нашел проблему в вашем состоянии. вам следует проверить verticalSizeClass вместо horizontalSizeClass.

КОГДА ПРОВЕРЬТЕ КЛАСС ГОРИЗОНТАЛЬНОГО РАЗМЕРА.

В КНИЖНОЙ КНИЖНОЙ ВЕРСИИ: все устройства iPhone имеют компактную ширину, поэтому каждый раз они будут переходить в другое состояние и правильно устанавливать вид.

В АЛЬБОМНОЙ ВЕРСИИ: все iPhone Plus (iPhone 6s Plus, iPhone 7 Plus и iPhone 8 plus) имеют обычную ширину, а все остальные iPhone (iPhone 6s, 6SE, iPhone 7 и iPhone 8, iPhone X) Устройства имеют компактную ширину, поэтому для всех устройств Plus он будет работать нормально, но не для других.

ДЛЯ ПОРТРЕТА: Портрет

ДЛЯ АЛЬБОМНОЙ ВЕРСИИ: Пейзаж

Подробнее читайте в официальном документе здесь.

Итак, обновите свой код до этого.

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
        super.traitCollectionDidChange(previousTraitCollection)

        if traitCollection.verticalSizeClass == .regular {
            NSLayoutConstraint.deactivate(compactConstraints)
            NSLayoutConstraint.activate(regularConstraints)
            socialMediaView.axis = .horizontal
        } else {
            NSLayoutConstraint.deactivate(regularConstraints)
            NSLayoutConstraint.activate(compactConstraints)
            socialMediaView.axis = .vertical
        }
    }

Пробуйте и делитесь результатами.

person Bhavin Kansagara    schedule 07.08.2018
comment
спасибо, да, проблема была с оператором if, поэтому я изменил это так - person Shakti; 07.08.2018
comment
если traitCollection.horizontalSizeClass == .regular || traitCollection.verticalSizeClass == .compact { // Ограничение активируется } else { // Ограничение деактивируется } } - person Shakti; 07.08.2018
comment
простое использование этого условия также будет работать: if traitCollection.verticalSizeClass == .regular. Потому что этот verticalSizeClass помогает проверять портретную и альбомную ориентацию для всех устройств. обычная высота означает портрет, а компактная высота означает пейзаж. - person Bhavin Kansagara; 07.08.2018