在这种情况下,如何重用 UIPickerView 中的视图



似乎很多人只是返回一个UILabel,但就我而言,我正在为视图添加标签。景色永远不会不是零。这是 UIPickerView 的不同用途,因为我将其组件旋转 90 度并让它横向滚动而不是上下滚动。

func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
    if view == nil {
        let customWidth = 300
        let customHeight = 300
        let view = UIView(frame: CGRect(x:0, y:0, width:customWidth, height:customHeight))
        let label = UILabel(frame:CGRect(x:0, y:0, width:customWidth, height:customHeight))
        if let filter = filters.first(where: {$0.pickerViewRowIndex == row}) {
            var leading = ""
            if appPurchased == false && filter.requiresPurchase == true { leading = "🔒" }
            label.text = "(leading)(filter.nameStr)"
        }
        label.textColor = UIColor.black 
        label.font = UIFont(name:"HelveticaNeue-Bold", size: 18.0)
        label.textAlignment = .center
        view.addSubview(label)
        view.transform = CGAffineTransform(rotationAngle: 90 * (.pi/180))
        label.layer.masksToBounds = false
        return view
    }else{
        print("not nil") // console never prints this line
    }
    guard let reusedView = view else {
        assertionFailure("pickerView label view container never set")
        return view!
    }
    return reusedView
}

景色永远不会不是零。

正确。文档是错误的。实际上没有在选取器视图中重用视图这样的事情 viewForRow .您始终需要创建一个新视图并将其返回。

最新更新