首页 > 解决方案 > 如何在 SnapKit 中设置 heightAnchor 的乘数 - swift

问题描述

我是一个新的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主视图的高度。

标签: swiftautolayoutnslayoutconstraintsnapkit

解决方案


显示时设置约束的代码输入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


推荐阅读