如何限制选择器视图中显示的行数?
How to limit the number of rows displayed in a picker view?
UIPickerView
默认显示 7 行(1 行,6 行),包括垂直填充在内大约需要 210 像素的高度。
如何只显示 2 个非活动项(活动项上方 1 个,活动项下方 1 个)以限制选择器的高度?
我可以使用 UIPickerViewDataSource
扩展来定义总行数和列数。我需要限制非活动行数以降低元素高度和屏幕的整体视觉复杂性。
您可以设置UIPickerView
高度,因此它只显示3个元素。我准备了一个简单的演示,其中我们将 UIPickerView
高度设置为常量并使用 UIPickerViewDelegate
的 rowHeightForComponent
函数将行高设置为 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
}
}
UIPickerView
默认显示 7 行(1 行,6 行),包括垂直填充在内大约需要 210 像素的高度。
如何只显示 2 个非活动项(活动项上方 1 个,活动项下方 1 个)以限制选择器的高度?
我可以使用 UIPickerViewDataSource
扩展来定义总行数和列数。我需要限制非活动行数以降低元素高度和屏幕的整体视觉复杂性。
您可以设置UIPickerView
高度,因此它只显示3个元素。我准备了一个简单的演示,其中我们将 UIPickerView
高度设置为常量并使用 UIPickerViewDelegate
的 rowHeightForComponent
函数将行高设置为 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
}
}