(Swift) ScrollView 中的 StackView 不起作用

Posted

技术标签:

【中文标题】(Swift) ScrollView 中的 StackView 不起作用【英文标题】:(Swift) StackView in ScrollView doesn't work 【发布时间】:2021-09-16 10:28:30 【问题描述】:

我想在 scrollView 中创建一个 stackView。 在stackView中,我想再添加一些stackViews,但是没有用。

因此,为简化起见,我添加了一些带有 addArrangedSubview() 的 UIView,但它没有显示任何内容。 我该如何解决这个问题?我花了很多时间...

        scrollView = UIScrollView()
        view.addSubview(scrollView)
        scrollView.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            scrollView.widthAnchor.constraint(equalTo: view.safeAreaLayoutGuide.widthAnchor),
            scrollView.heightAnchor.constraint(equalTo: view.safeAreaLayoutGuide.heightAnchor),
            scrollView.centerXAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerXAnchor),
            scrollView.centerYAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerYAnchor)
        ])
        
        
        var line1 = UIView(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: 1000))
        line1.backgroundColor = .blue
        var line2 = UIView(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: 1000))
        line2.backgroundColor = .green
        
        
        profile()
        
        stackView = UIStackView()
        stackView.axis = .vertical
        stackView.distribution = .fill
        stackView.alignment = .fill
        stackView.spacing = 10
        scrollView.addSubview(stackView)
        
        
        stackView.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            stackView.topAnchor.constraint(equalTo: scrollView.topAnchor),
            stackView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor),
            stackView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor),
            stackView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor)
        ])
        
        stackView.addArrangedSubview(line1)
        stackView.addArrangedSubview(line2)
        
        stackView.updateConstraints()
        stackView.setNeedsLayout()

【问题讨论】:

【参考方案1】:

我猜在这段代码运行的那一刻,ViewControllers - 视图仍然没有设置,所以你的 line1/2 的宽度将导致 0。 你也应该使用自动布局来布局你的视图。

var line1 = UIView()
line1.translatesAutoresizingMaskIntoConstraints = false 
line1.backgroundColor = .blue

var line2 = UIView()
line1.translatesAutoresizingMaskIntoConstraints = false 
line2.backgroundColor = .green
    
stackView = UIStackView(arrangedSubviews: [line1, line2])
stackView.axis = .vertical
stackView.distribution = .fill
stackView.alignment = .fill
stackView.spacing = 10
scrollView.addSubview(stackView)

stackView.translatesAutoresizingMaskIntoConstraints = false
    NSLayoutConstraint.activate([
        stackView.topAnchor.constraint(equalTo: scrollView.topAnchor),
        stackView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor),
        stackView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor),
        stackView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor),

        line1.widthAnchor.constraint(equalTo: view.widthAnchor),
        line1.heightAnchor.constraint(equalToConstant: 1000),

        line2.widthAnchor.constraint(equalTo: view.widthAnchor),
        line2.heightAnchor.constraint(equalToConstant: 1000),
    ])

【讨论】:

以上是关于(Swift) ScrollView 中的 StackView 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

swift ScrollView中的图像

Swift - ScrollView 中的 StackView 不滚动

SWIFT - ScrollView 内的 WKWebView 中的 HTML 滚动事件

如何在 swift 中增加 ScrollView 中的 UITableView 高度

UITableViewCell中的Swift ScrollView不滚动

Swift - 如何对 ScrollView 中的项目使用自动布局?