swift - 在这种情况下,如何重用 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
。您总是需要创建一个新视图并将其返回。
推荐阅读
- swift - (Swift) 如何使用 Segue 将 textField 传递给另一个 ViewController 下的 TableViewCell?
- java - 如何将 JComponents 放置在 Jframe 背景图像上?
- java - 找不到适合 jdbc:derby 的驱动程序
- java - 从 OpenAPI 生成 Spring MVC 映射时可以添加方法参数吗?
- swift - 如何制作一个空的 Int 变量?
- linux - 将 RTF 粘贴为格式化的 Markdown;将 Markdown 导出为格式化的 HTML
- python - 将 JSON 字符串插入 PostgreSQL 表列
- asp.net-mvc-5 - 在 MVC5 Html 网格列中使用 Font Awesome
- spring - Eclipse 与 Spring Boot 给出 JSP 错误:在预期路径 /src/main/webapp/js/home.js 未找到片段“/js/home.js”
- javascript - 异步方法链接?