Ios 删除约束

Ios 删除约束,ios,swift,constraints,Ios,Swift,Constraints,我试图消除约束。我想对肖像画和风景画进行不同的限制。如果将方向更改为纵向,则调用函数setupConstraintsInPortrait,反之亦然。我有两个功能 此功能用于设置纵向模式 func setupConstrainsInPortrait() { view.addSubview(myView) myView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true myView.

我试图消除约束。我想对肖像画和风景画进行不同的限制。如果将方向更改为纵向,则调用函数setupConstraintsInPortrait,反之亦然。我有两个功能

此功能用于设置纵向模式

func setupConstrainsInPortrait() {

    view.addSubview(myView)

    myView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    myView.topAnchor.constraint(equalTo: view.topAnchor, constant: 50).isActive = true
    myView.heightAnchor.constraint(equalToConstant: 300).isActive = true
    myView.widthAnchor.constraint(equalToConstant: view.frame.size.width).isActive = true

    view.addSubview(switchKmM)

    switchKmM.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    switchKmM.topAnchor.constraint(equalTo: myView.bottomAnchor, constant: 10).isActive = true
    switchKmM.heightAnchor.constraint(equalToConstant: 50).isActive = true
    switchKmM.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true

    view.addSubview(speedLbl)

    speedLbl.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    speedLbl.topAnchor.constraint(equalTo: view.bottomAnchor, constant: -50).isActive = true
    speedLbl.heightAnchor.constraint(equalToConstant: 50).isActive = true
    speedLbl.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true

}
此功能用于设置横向模式

    func setupConstrainsInLandScape() {
    view.addSubview(myView)

    myView.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 10).isActive = true
    myView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
    myView.heightAnchor.constraint(equalToConstant: 300).isActive = true
    myView.widthAnchor.constraint(equalToConstant: 150).isActive = true

    view.addSubview(switchKmM)

    switchKmM.leftAnchor.constraint(equalTo: myView.rightAnchor, constant: 30).isActive = true
    switchKmM.topAnchor.constraint(equalTo: view.topAnchor, constant: 30).isActive = true
    switchKmM.heightAnchor.constraint(equalToConstant: 50).isActive = true
    switchKmM.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
}
我在viewWillTransition中使用这些函数

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    if UIDevice.current.orientation.isLandscape {
        print("landscape!")
        view.backgroundColor = .green
        setupConstrainsInLandScape()
        self.viewWillLayoutSubviews()


    }
    else {
        print("portrét")
        view.backgroundColor = .white
        setupConstrainsInPortrait()
        self.viewWillLayoutSubviews()

    }
    super.viewWillTransition(to: size, with: coordinator)
}

问题是,横向模式中的约束(来自纵向函数)不会被删除


我希望有人能帮助我。。。谢谢

您可以使用以下方法删除约束:

myView.constraints.removeAll()

在设置新的之前。

您做的工作不够。您需要保留对激活的所有约束的引用,以便以后可以停用它们。例如,你说:

myView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
myView.topAnchor.constraint(equalTo: view.topAnchor, constant: 50).isActive = true
myView.heightAnchor.constraint(equalToConstant: 300).isActive = true
myView.widthAnchor.constraint(equalToConstant: view.frame.size.width).isActive = true
相反,你需要说

self.myConstraints1 = [
    myView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
    myView.topAnchor.constraint(equalTo: view.topAnchor, constant: 50),
    myView.heightAnchor.constraint(equalToConstant: 300),
    myView.widthAnchor.constraint(equalToConstant: view.frame.size.width),
]
现在激活所有这些约束。从头到尾以同样的方式进行


因此,当由于方向正在更改而停用约束时,您可以引用这些约束并执行此操作。

问题/问题是什么?给出期望结果与实际结果。问题是横向模式中的约束(来自纵向功能)没有被删除“横向模式中的约束(来自纵向功能)没有被删除”毫不奇怪。我没有看到任何可以删除它们的代码。你所要做的就是说
isActive=true
。你从来没有说过
isActive=false
。因此,您只需不断添加约束,而不删除任何约束。在这种情况下,你期待什么?在投票否决之前先看看这个问题。他在问如何消除这些限制。我怎么回答的,我回答了。他甚至没有说明他的结果或他的尝试结果。他问我如何删除,我回答了。视图上的约束属性是不可变的-不能使用可变函数
removeAll()
。我想你的意思是
myView.removeConstraints(myView.constraints)
与“swift”无关。如果您对某个问题很认真,您至少愿意看一下基本文档: