我是一个新的iOS程序。我真的很喜欢我的视图设置约束库。但是现在我有一个疑问,我们可以在NSLayoutConstraint
中使用主视图的multiplier
来调整高度。但是我不知道如何在SnapKit中实现这一目标。
NSLayoutConstraint
提供的内容
NSLayoutConstraint.activate([
cardViewInstance.mainCardView.topAnchor.constraint(equalTo: view.topAnchor, constant: marginOffset),
cardViewInstance.mainCardView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20),
cardViewInstance.mainCardView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20),
cardViewInstance.mainCardView.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 1/5)
])
这是我对SnapKit
所做的
cardViewInstance.mainCardView.snp.makeConstraints { (make) in
make.top.equalTo(view)
make.topMargin.equalTo(marginOffset)
make.leading.equalTo(self.view)
make.leadingMargin.equalTo(20)
make.trailing.equalTo(self.view)
make.trailingMargin.equalTo(-20)
}
现在,我被迫将高度设置为主视图的multiplier
。
答案 0 :(得分:2)
显示时,您在NSLayoutConstraint
中编写的代码与在SnapKit
中设置约束的代码不同。
您知道,当您设置cardViewInstance.mainCardView.topAnchor.constraint(equalTo: view.topAnchor, constant: marginOffset)
时,其视图将像在marginOffset
中设置的那样停留在顶部,并从顶部开始填充。然后在SnapKit中设置
make.top.equalTo(view)
make.topMargin.equalTo(marginOffset)
因此,这是错误的,因为您不能同时设置top
和topMargin
,因为它与您在NSLayoutConstraint
中设置的内容不一样
因此,请使用类似文件(根据文档)进行纠正:
make.top.equalTo(view).offset(marginOffset)
对于您质疑如何设置multiplier
的问题,您可以通过声明类似view.frame.height / 2
的变量来实现,并且可以将SnapKit
约束make.height.equalTo(view.frame.height / 5)
应用于您自己
这就是整个代码的样子
cardViewInstance.mainCardView.snp.makeConstraints { (make) in
make.top.equalTo(view).offset(marginOffset)
make.leading.equalTo(self.view).offset(20)
make.trailing.equalTo(self.view).offset(-20)
make.height.equalTo(view.frame.height / 5)
}
希望有帮助:D