You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 09:36:29