我曾尝试停用和重新激活...但是我似乎无法找出解决方法...我有示例代码,但是如果有人知道如何迅速更新约束,它总是让我失望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
}
答案 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
这是结果