UIPickerView的“重用视图”始终为零

在我的程序中,我有与UIPickerView的每一行附加的自定义视图。 但重复使用视图始终是零。 因此,每次创build新的自定义视图对象时。 我怎样才能使用“重用视图”?

func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView { if let vv = view { return vv // This will never getting called } let rowSize = pickerView.rowSize(forComponent: component) let pickerContentView = PickerContentView(frame: CGRect(x: 0, y: 0, width: rowSize.width, height: rowSize.height)) pickerContentView.titleText = (items[Array(items.keys)[component]]! as [String])[row] as String + (component == 0 ? (row == 0 ? " MB" : " GB") : " vCPU") return pickerContentView } 

UIView子类

 class PickerContentView: UIView { // FIXME: - properties var titleText: String? { didSet { if let titleText = self.titleText { title.text = titleText } } } // FIXME: - initializer override init(frame: CGRect) { super.init(frame: frame) setupViews() } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } // FIXME: - create views private let title: Label = { let label = Label() label.textAlignment = .center label.numberOfLines = 1 label.font = UIFont.systemFont(ofSize: 17, weight: .regular) label.textColor = UIColor(hex: 0x212121, alpha: 1) label.fontSize = 17 label.frameHeight = 44 label.clipsToBounds = true return label }() // FIXME: - define constraints private func setupViews() { addSubview(title) // x, y, width, height => title addConstraints(format: "H:|-8-[v0]-8-|", views: title) addConstraints(format: "V:|[v0]|", views: title) layoutIfNeeded() } } 

尝试这个 :

  func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView { if let vv = view { return vv // This will never getting called } let rowSize = pickerView.rowSize(forComponent: component) let pickerContentView = PickerContentView(frame: CGRect(x: 0, y: 0, width: rowSize.width, height: rowSize.height)) pickerContentView.titleText = (items[Array(items.keys)[component]]! as [String])[row] as String + (component == 0 ? (row == 0 ? " MB" : " GB") : " vCPU") view?.addSubview(pickerContentView) return view! }