快速更新约束5

时间:2020-05-17 14:42:02

标签: swift swift5 xcode11.4

我曾尝试停用和重新激活...但是我似乎无法找出解决方法...我有示例代码,但是如果有人知道如何迅速更新约束,它总是让我失望5请让我知道...我知道存在updateConstraint()只是不确定如何使用它。

let constraint1: NSLayoutConstraint? = text.bottomAnchor.constraint(equalTo: view.bottomAnchor)

let constraint2: NSLayoutConstraint? = text.bottomAnchor.constraint (equalTo: view.bottomAnchor, constant: 5)

if acondition {
constraint1?.isActive = false
constraint2.isActive = true
} else {
constraint2.isActive = false
constraint1.isActive = true
}

2 个答案:

答案 0 :(得分:0)

可能您可以检查@properties并将weak替换为strong。原因是,isActive = false将设置self.yourConstraint = nil,因此您将无法再次使用self.yourConstraint

答案 1 :(得分:0)

首先声明该变量,在将开始约束变量设置为true之后,并在调用具有活动约束和非活动约束的函数之后,尝试以下示例:

在控制器类下声明一个按钮和一个要移动的视图:

viewModel.msg.observe(requireActivity(), Observer {
        if(it.isNotBlank()) {
            Snackbar.make(requireView().rootView, it, Snackbar.LENGTH_SHORT).show()
            viewModel.onShowMsgComplete()
        }
    })

在声明变量之后使用约束移动视图:

let dummyView = UIView()
let button = UIButton(type: .system)

在ViewDiLoad中设置视图,按钮和约束,如下所示:

var up: NSLayoutConstraint?
var down: NSLayoutConstraint?

现在编写函数以通过约束动画移动视图:

dummyView.backgroundColor = .yellow
    dummyView.translatesAutoresizingMaskIntoConstraints = false

    button.setTitle("viewDiwn", for: .normal)
    button.backgroundColor = .red
    button.setTitleColor(.white, for: .normal)
    button.titleLabel?.font = .systemFont(ofSize: 16)
    button.addTarget(self, action: #selector(handletapButton), for: .touchUpInside)// button action that call handletapButton func
    button.translatesAutoresizingMaskIntoConstraints = false

    view.addSubview(dummyView)
    up = dummyView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor)
    up?.isActive = true // start constraint active
    down = dummyView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 100) // constraint to activate for move the view

    dummyView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
    dummyView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
    dummyView.heightAnchor.constraint(equalToConstant: 50).isActive = true

    view.addSubview(button)
    button.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
    button.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
    button.heightAnchor.constraint(equalToConstant: 50).isActive = true
    button.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true

这是结果

enter image description here