【发布时间】:2021-05-23 20:31:30
【问题描述】:
UIPickerView 默认显示 7 行(1 行,6 行非活动),包括垂直填充在内,高度约为 210 像素。
如何仅显示 2 个非活动项(活动项上方 1 个,活动项下方 1 个)以限制选取器的高度?
我可以使用UIPickerViewDataSource 扩展来定义行和列的总数。我需要限制非活动行数以降低元素高度和屏幕的整体视觉复杂性。
【问题讨论】:
标签: swift xcode storyboard
UIPickerView 默认显示 7 行(1 行,6 行非活动),包括垂直填充在内,高度约为 210 像素。
如何仅显示 2 个非活动项(活动项上方 1 个,活动项下方 1 个)以限制选取器的高度?
我可以使用UIPickerViewDataSource 扩展来定义行和列的总数。我需要限制非活动行数以降低元素高度和屏幕的整体视觉复杂性。
【问题讨论】:
标签: swift xcode storyboard
你可以设置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
}
}
【讨论】: