将layoutMargins添加到UIStackView中的一个元素

Jer*_*kar 6 swift uistackview layoutmargins

我想创建一个包含 3 个元素的垂直堆栈视图。我只想要第二个和最后一个元素之间有更多的空间。所以我考虑添加到最后一个元素:

mylastelement.layoutMargins = UIEdgeInsets(top:30, left:0,bottom:0, right:0)
Run Code Online (Sandbox Code Playgroud)

但布局边距没有应用在我的堆栈视图中。有没有什么简单的方法可以实现这一点(我想避免修改最后一个元素的内部高度)。

编辑:我只是尝试通过执行以下操作来增加框架内的第二个元素高度(+50):

my2ndElementLabel.sizeToFit()
my2ndElementLabel.frame = CGRect(x:my2ndElementLabel.frame.origin.x,y:lmy2ndElementLabel.frame.origin.y,
                                 width:my2ndElementLabel.frame.width, height:my2ndElementLabel.frame.height + 50)
Run Code Online (Sandbox Code Playgroud)

但没有效果。

EDIT2:我尝试向我的 UIStackView 添加随机视图,但该视图被忽略!在理解 UIKit 如何工作时可能错过了一些东西?...:

let v = UIView(frame:CGRect(x:0,y:0,width:100,height:400))
v.backgroundColor = .red
myStackView.addArrangedSubview(v)
//...
Run Code Online (Sandbox Code Playgroud)

Jer*_*kar 7

这是我所做的一个扩展,有助于快速实现这样的利润:

extension UIStackView {

    func addArrangedSubview(_ v:UIView, withMargin m:UIEdgeInsets )
    {
        let containerForMargin = UIView()
        containerForMargin.addSubview(v)
        v.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            v.topAnchor.constraint(equalTo: containerForMargin.topAnchor, constant:m.top ),
            v.bottomAnchor.constraint(equalTo: containerForMargin.bottomAnchor, constant: m.bottom ),
            v.leftAnchor.constraint(equalTo: containerForMargin.leftAnchor, constant: m.left),
            v.rightAnchor.constraint(equalTo: containerForMargin.rightAnchor, constant: m.right)
        ])

        addArrangedSubview(containerForMargin)
    }
}
Run Code Online (Sandbox Code Playgroud)


Roo*_*aap 5

您可以做的是在第二个和第三个元素之间设置自定义间距。

myStackView.setCustomSpacing(30.0, after: my2ndElementLabel)
Run Code Online (Sandbox Code Playgroud)