iOS15.5中UIPickerView显示空白标签问题求助
问题解决:UIPickerView升级后显示空白的修复方案
你的代码在升级到Xcode 13后无法正常显示UIPickerView内容,核心原因是缺少UIPickerViewDataSource的设置,同时可通过细节调整避免显示异常,具体修复步骤如下:
1. 核心修复:设置UIPickerView的dataSource
在初始化pckMarkup后,除了设置delegate,必须添加以下代码:
pckMarkup.dataSource = self
iOS后续版本对UIPickerView的职责划分更严格,必须同时设置delegate和dataSource才能正确加载行数据,旧版本iOS 7对此限制较宽松,这是导致空白的关键原因。
2. 可选优化:避免标签被缩放裁剪
自定义pickerLabel时,添加自适应布局代码,防止缩放变换导致文字被裁剪:
if pickerLabel == nil { pickerLabel = UILabel() pickerLabel?.font = UIFont(name: "Arial", size: 18) pickerLabel?.textAlignment = .center // 让标签自适应内容宽度 pickerLabel?.sizeToFit() }
修复后的完整初始化代码片段
修改后的picker初始化部分:
pckMarkup = UIPickerView(frame: CGRect(x: 290, y: start_y+10, width: 60, height: 90)); pckMarkup.delegate = self; // 新增这行核心代码 pckMarkup.dataSource = self; t = CGAffineTransform (translationX: 0, y: 0); s = CGAffineTransform (scaleX: 1.5,y: 0.7); u = CGAffineTransform (translationX: 0 ,y: 0); pckMarkup.transform = t.concatenating (s.concatenating(u)); pckMarkup.tag=10; pckMarkup.backgroundColor = UIColor(red: 225/255, green: 235/255, blue: 239/255, alpha: 1) pckMarkup.layer.borderColor = (UIColor(red: 31/255, green: 128/255, blue: 170/255, alpha: 1).cgColor); pckMarkup.layer.borderWidth = 5.0 pckMarkup.layer.masksToBounds = true pckMarkup.layer.cornerRadius = 8 view.addSubview(pckMarkup);
内容的提问来源于stack exchange,提问作者Shmuel
相关产品推荐
相关产品推荐

