首页 > 解决方案 > 在 swift 5 中以编程方式更改比例约束

问题描述

我有一个弹出视图,我希望它在 iPad 的纵向和横向外壳中具有不同的尺寸。这是我的代码,但效果不佳,

我希望它在纵向和横向时具有超级视图宽度的 60% 和 40% 的宽度。

在纵向和横向时,高度分别为超级视图高度的 50% 和 50%。

func popupConfiguration(){
    switch UIDevice().userInterfaceIdiom {
    case .tv, .carPlay, .unspecified, .phone:
        break
    case .pad:
        if UIApplication.shared.statusBarOrientation == .portrait || UIApplication.shared.statusBarOrientation == .portraitUpsideDown {
            popupView.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 0.6).isActive = true
            popupView.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.5).isActive = true
        } else {
            popupView.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 0.4).isActive = true
            popupView.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.5).isActive = true
        }
    @unknown default:
        break
    }
}

然后,我应该将它添加到viewDidLayoutSubviewsorviewWillAppear吗?非常感谢

标签: iosswiftconstraints

解决方案


实施viewWillTransition(to:with:)。查看新尺寸是纵向(高度更大)还是横向(宽度更大)。相应地替换您的约束;如果您在过渡协调器的动画中执行此操作,则更改将与旋转一起进行动画处理。


推荐阅读