Swift TraitCollectionDidChange对iphone X的行为不同

Swift TraitCollectionDidChange对iphone X的行为不同,swift,autolayout,landscape-portrait,size-classes,Swift,Autolayout,Landscape Portrait,Size Classes,在本例中,我将根据traitCollection.horizontalSizeClass更改视图的布局 这是我的代码片段 override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { super.traitCollectionDidChange(previousTraitCollection) if traitCollection.horizonta

在本例中,我将根据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的指示进行 在横向模式下,我希望兔子图像位于左侧,所有socialMedias轴的堆栈视图都是水平的
但在iPhoneX横向模式下,它不会出现,而在Phone7中,它会出现。请查看下面的屏幕截图
查看您的问题和状况,我发现您的状况存在问题。您应该检查垂直大小类而不是水平大小类

检查水平尺寸等级时

纵向:所有iPhone设备都具有紧凑的宽度,因此每次都会转到else条件并正确设置视图

横向:所有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
        }
    }

试着分享结果。

你的问题是什么?看一看,答案是有帮助的:@BhavinKansagara我已经更新了我的问题,请检查一次,让我知道你想要的任何澄清谢谢是的,问题是if语句,所以我修改了if traitCollection.horizontalSizeClass==.regular | | traitCollection.verticalSizeClass=.compact{//Constraint activate}否则{//Constraint deactivate}仅使用此条件也可以工作:if traitCollection.verticalSizeClass==.regular。因为verticalSizeClass有助于检查所有设备的纵向和横向。规则高度表示纵向,紧凑高度表示横向。