TraitCollectionDidChange对于iPhone X的行为有所不同

时间:2018-08-07 08:04:54

标签: swift autolayout landscape-portrait size-classes

就我而言,我正在根据traitCollection.horizo​​ntalSizeClass更改视图的布局 这是我的代码段。

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轴的stackview将为水平
 但是在iPhone X横向模式下不会出现,而在iPhone 7下会出现。请检查以下屏幕截图 Screen_Shot_2018-08-07_at_1.32.02_PM.png

1 个答案:

答案 0 :(得分:1)

看着你的问题和状况,我发现你的状况有问题。您应该检查 verticalSizeClass 而不是horizo​​ntalSizeClass。

检查水平尺寸等级时。

肖像:所有iPhone设备的宽度都很紧凑,因此每次进入其他条件并正确设置视图。

在景观中:所有iPhone Plus (iPhone 6s Plus,iPhone 7 Plus和iPhone 8 plus)设备具有常规宽度,所有其他iPhone (iPhone 6s ,6SE,iPhone 7和iPhone 8,iPhone X)。设备具有紧凑的宽度,因此,对于所有其他设备,它都可以正常工作,但不适用于其他设备。

对于肖像: Portrait

对于景观: Landscape

有关更多信息,请阅读官方文档here

因此,将您的代码更新为此。

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
        }
    }

尝试并分享结果。