为什么我的 UIView 列表在 UIStackView 和 UIScrollView 中不可见?

问题描述 投票:0回答:1

我已经弄乱这段代码有一段时间了。我的 UIViews 循环后没有显示。我已经在没有限制的情况下尝试过这个,结果是每个 UIView 都被渲染在彼此之上。我更喜欢使用约束,就像我设置的那样。

你能看一下这段代码并解释为什么我的 UIView 没有渲染以及为什么我的 UIScrollView 没有滚动吗?

import UIKit

class EventsListViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
    
        let scrollView = UIScrollView()
        let scrollViewConstraints: [NSLayoutConstraint] = [
            scrollView.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor),
            scrollView.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor),
            scrollView.leadingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.leadingAnchor),
            scrollView.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.trailingAnchor)
        ]
        self.view.addSubview(scrollView)
        scrollView.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate(scrollViewConstraints)
        scrollView.backgroundColor = .gray
        
        let stackView = UIStackView(frame: scrollView.frame)
        let stackViewConstraints: [NSLayoutConstraint] = [
            stackView.topAnchor.constraint(equalTo: scrollView.topAnchor),
            stackView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor),
            stackView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor),
            stackView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor)
        ]
        scrollView.addSubview(stackView)
        stackView.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate(stackViewConstraints)
        stackView.axis = .vertical
        stackView.distribution = .fill
        stackView.alignment = .fill
        stackView.contentMode = .top
        stackView.spacing = 5
        
        for event in location.myEvents! {
            let listItem = UIView()
            listItem.layer.name = event.eventID
            listItem.backgroundColor = .blue
            stackView.addArrangedSubview(listItem)
            let listItemConstraints: [NSLayoutConstraint] = [
                listItem.heightAnchor.constraint(equalToConstant: 35),
                listItem.widthAnchor.constraint(equalToConstant: stackView.frame.width)
            ]
            listItem.translatesAutoresizingMaskIntoConstraints = false
            NSLayoutConstraint.activate(listItemConstraints)
        }
        
    //       scrollView.contentSize = CGSize(width: Int(view.frame.width), height: (height + spacing * count))
        
    }
}

我尝试过以下方法:

  • 没有约束结果 - 所有 UIView 都彼此重叠
  • 约束结果 - UIViews 不渲染
ios swift uiscrollview uistackview
1个回答
0
投票

使用 ScrollView 进行自动布局有点棘手。正如我所见,您缺少 stackView 的 widthAnchor,请添加此行:

...
stackView.widthAnchor.constraint(equalTo: self.view.widthAnchor)
© www.soinside.com 2019 - 2024. All rights reserved.