如何限制选择器视图中显示的行数?

How to limit the number of rows displayed in a picker view?

UIPickerView 默认显示 7 行(1 行,6 行),包括垂直填充在内大约需要 210 像素的高度。

如何只显示 2 个非活动项(活动项上方 1 个,活动项下方 1 个)以限制选择器的高度?

我可以使用 UIPickerViewDataSource 扩展来定义总行数和列数。我需要限制非活动行数以降低元素高度和屏幕的整体视觉复杂性。

您可以设置UIPickerView高度,因此它只显示3个元素。我准备了一个简单的演示,其中我们将 UIPickerView 高度设置为常量并使用 UIPickerViewDelegaterowHeightForComponent 函数将行高设置为 UIPickerView 高度除以所需的行数。

class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
    private let pickerViewHeight: CGFloat = 150
    private let numberOfVisibleRows: CGFloat = 3 
    override func viewDidLoad() {
        super.viewDidLoad()

        let picker = UIPickerView()
        picker.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(picker)

        picker.dataSource = self
        picker.delegate = self

        picker.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true
        picker.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true
        picker.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true
        picker.heightAnchor.constraint(equalToConstant: pickerViewHeight).isActive = true
    }

    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return 10
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
            return "Row \(row)"
    }

    func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
        return pickerViewHeight / numberOfVisibleRows
    }
}