Ios 属性PreserveSPerViewLayoutMargins在UIStackView中被忽略

Ios 属性PreserveSPerViewLayoutMargins在UIStackView中被忽略,ios,uiscrollview,uikit,uistackview,Ios,Uiscrollview,Uikit,Uistackview,我试图在一个滚动视图中创建一个堆栈视图,该视图尊重superview的布局边距。因此,我将preservesPerviewLayoutMargins设置为true,并得出以下代码: import UIKit class ViewController: UIViewController { let stackView: UIStackView = { let sv = UIStackView() sv.axis = .vertical sv

我试图在一个滚动视图中创建一个堆栈视图,该视图尊重superview的布局边距。因此,我将
preservesPerviewLayoutMargins
设置为true,并得出以下代码:

import UIKit

class ViewController: UIViewController {
    let stackView: UIStackView = {
        let sv = UIStackView()
        sv.axis = .vertical
        sv.preservesSuperviewLayoutMargins = true
        sv.translatesAutoresizingMaskIntoConstraints = false
        return sv
    }()

    let scrollView: UIScrollView = {
        let sv = UIScrollView()
        sv.translatesAutoresizingMaskIntoConstraints = false
        sv.alwaysBounceVertical = true
        sv.preservesSuperviewLayoutMargins = true
        return sv
    }()

    override func viewDidLoad() {
        view.layoutMargins = UIEdgeInsets(top: 0, left: 64, bottom: 0, right: 64)
        view.addSubview(scrollView)

        scrollView.addSubview(stackView)
        
        NSLayoutConstraint.activate([
            stackView.leftAnchor.constraint(equalTo: view.leftAnchor),
            stackView.rightAnchor.constraint(equalTo: view.rightAnchor),
        ])
        
        NSLayoutConstraint.activate([
            scrollView.contentLayoutGuide.topAnchor.constraint(equalTo: stackView.topAnchor),
            scrollView.contentLayoutGuide.bottomAnchor.constraint(equalTo: stackView.bottomAnchor),
            scrollView.contentLayoutGuide.leftAnchor.constraint(equalTo: stackView.leftAnchor),
            scrollView.contentLayoutGuide.rightAnchor.constraint(equalTo: stackView.rightAnchor),
        ])
        
        NSLayoutConstraint.activate([
            view.topAnchor.constraint(equalTo: self.scrollView.topAnchor),
            view.bottomAnchor.constraint(equalTo: self.scrollView.bottomAnchor),
            view.leftAnchor.constraint(equalTo: self.scrollView.leftAnchor),
            view.rightAnchor.constraint(equalTo: self.scrollView.rightAnchor),
        ])

        let l = UILabel()
        l.text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Itaque his sapiens semper vacabit. An est aliquid, quod te sua sponte delectet? Aliud igitur esse censet gaudere, aliud non dolere. Quasi ego id curem, quid ille aiat aut neget. Cur post Tarentum ad Archytam? Duo Reges: constructio interrete. Atque etiam valítudinem, vires, vacuitatem doloris non propter utilitatem solum, sed etiam ipsas propter se expetemus. Naturales divitias dixit parabiles esse, quod parvo esset natura contenta."
        l.numberOfLines = 0
        l.translatesAutoresizingMaskIntoConstraints = false

        stackView.addArrangedSubview(l)
        super.viewDidLoad()
    }
}


但是,lorem ipsum文本完全忽略了左侧64和右侧64的边距


这里缺少什么?

默认情况下,堆栈视图的排列子视图通过堆栈视图的边缘进行约束。。。而不是利润

您可以通过将堆栈视图的
.isLayoutMarginsRelativeArrange
属性设置为
true
,来解决此问题:

let stackView: UIStackView = {
    let sv = UIStackView()
    sv.axis = .vertical
    sv.preservesSuperviewLayoutMargins = true
    sv.translatesAutoresizingMaskIntoConstraints = false

    // add this line
    sv.isLayoutMarginsRelativeArrangement = true

    return sv
}()

我知道事情就是这么简单。谢谢