如何在SnapKit中设置heightAnchor的乘数-Swift

时间:2018-09-30 14:27:25

标签: swift autolayout nslayoutconstraint snapkit

我是一个新的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

1 个答案:

答案 0 :(得分:2)

显示时,您在NSLayoutConstraint中编写的代码与在SnapKit中设置约束的代码不同。

您知道,当您设置cardViewInstance.mainCardView.topAnchor.constraint(equalTo: view.topAnchor, constant: marginOffset)时,其视图将像在marginOffset中设置的那样停留在顶部,并从顶部开始填充。然后在SnapKit中设置

make.top.equalTo(view) make.topMargin.equalTo(marginOffset)

因此,这是错误的,因为您不能同时设置toptopMargin,因为它与您在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