以下是一个示例代码,演示如何创建一个不占满整个屏幕的表视图,并将其放在一个堆栈视图中:
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
let tableView = UITableView()
let stackView = UIStackView()
override func viewDidLoad() {
super.viewDidLoad()
// 设置堆栈视图的属性
stackView.axis = .vertical
stackView.alignment = .center
stackView.spacing = 10
stackView.translatesAutoresizingMaskIntoConstraints = false
// 添加堆栈视图到父视图中
view.addSubview(stackView)
// 使用自动布局约束设置堆栈视图的位置和大小
NSLayoutConstraint.activate([
stackView.topAnchor.constraint(equalTo: view.topAnchor, constant: 100),
stackView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20),
stackView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20),
stackView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -100)
])
// 设置表视图的属性
tableView.delegate = self
tableView.dataSource = self
tableView.frame = CGRect(x: 0, y: 0, width: view.frame.width - 40, height: 300)
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
// 将表视图添加到堆栈视图中
stackView.addArrangedSubview(tableView)
}
// 表视图的数据源方法
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
cell.textLabel?.text = "Row \(indexPath.row)"
return cell
}
}
在这个示例中,我们创建了一个包含一个表视图的堆栈视图。堆栈视图的位置和大小通过自动布局约束进行设置,以确保它不会占满整个屏幕。表视图的位置和大小也通过设置其frame来实现。最后,我们将表视图添加到堆栈视图中。