UIPickerView 重用视图始终为零

UIPickerView reusing view is always nil

根据 Apples API 引用在此方法中重用视图

optional func pickerView(_ pickerView: UIPickerView, 
          viewForRow row: Int, 
        forComponent component: Int, 
             reusing view: UIView?) -> UIView

是选择器视图的缓存视图但是当我尝试将它用于下一行时它总是 nil 而我返回 UILabel 当重用视图为 nil 时。问题是什么? 这是我的实现:

func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
    let pickerLabel = UILabel()
    pickerLabel.textColor = UIColor.black
    pickerLabel.text = "10"
    pickerLabel.textAlignment = NSTextAlignment.center
    pickerLabel.sizeToFit()
    return pickerLabel
}

您的代码未尝试使用重用视图。您的代码应该是这样的:

func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
    var pickerLabel : UILabel
    if let label = view as? UILabel {
        pickerLabel = label
    } else {
        pickerLabel = UILabel()
        pickerLabel.textColor = UIColor.black
        pickerLabel.textAlignment = NSTextAlignment.center
    }

    pickerLabel.text = "10"
    pickerLabel.sizeToFit()

    return pickerLabel
}

如果重用视图是标签,则此代码会重用标签。否则它会创建并设置一个新标签。

请注意,当滚动选择器视图时,选择器只会传入重用视图。它类似于 table 视图的单元格重用。