我目前正在使用一个非常互动的UI。需要基于userInput移动视图。我大约有六个视图,所有子UI元素都存储为单独的类。在我的主viewController中,我想处理这些视图约束的重置。为此,我需要将NSLayout约束存储在某个位置。将它们全部都放入我的viewController中感觉不对。
我已经经历了很多迭代,但是每次看来我都需要手动创建所有NSlayoutconstraint属性并将其分别存储在父Viewcontroller上。
我不需要的是具有功能的UI扩展,该功能可以设置约束并将其存储在该类上的属性,以便我可以随意停用或更改它们。
extension UIView {
func anchorFixedHeight(
top: NSLayoutAnchor<NSLayoutYAxisAnchor>,
lead: NSLayoutAnchor<NSLayoutXAxisAnchor>,
trail: NSLayoutAnchor<NSLayoutXAxisAnchor>,
height: CGFloat,
Ypadding: CGFloat,
Xpadding: CGFloat)
{
self.topAnchor.constraint(equalTo: top, constant: Ypadding)
self.heightAnchor.constraint(equalToConstant: height)
self.leadingAnchor.constraint(equalTo: lead, constant: Xpadding)
self.trailingAnchor.constraint(equalTo: trail, constant: -Xpadding)
}
}
但这不会起作用,因为NSlayouconstrain.activate()接受约束数组,一旦设置了achor,它将变成锚定约束。
我一直试图将它们存储为属性,但是迅速不会允许扩展中存储属性。但是我也不想,但是我也不想在所有视图中复制所有这些约束属性。
答案 0 :(得分:0)
您可能需要类似的东西
class CusView:UIView {
var top:NSLayoutConstraint!
var lead:NSLayoutConstraint!
var tra:NSLayoutConstraint!
var heigh:NSLayoutConstraint!
override func didMoveToSuperview() {
super.didMoveToSuperview()
self.translatesAutoresizingMaskIntoConstraints = false
top = self.topAnchor.constraint(equalTo:self.superview!.topAnchor, constant: 12)
heigh = self.heightAnchor.constraint(equalToConstant: 12)
lead = self.leadingAnchor.constraint(equalTo:self.superview!.leadingAnchor, constant: 12)
tra = self.trailingAnchor.constraint(equalTo:self.superview!.trailingAnchor, constant: -12)
NSLayoutConstraint.activate([top,lead,tra,heigh])
}
}