UIPickerView 抖动
Posted
技术标签:
【中文标题】UIPickerView 抖动【英文标题】:UIPickerView Jitter 【发布时间】:2017-03-01 22:59:57 【问题描述】:我有一个 UIPickerView 和一个 UILabel,彼此分开。
当用户在 UIPickerView 中选择一行时,我使用委托函数更改 UILabel 文本:
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
label.text = String(row);
但由于某种原因,更改标签的文本会导致 UIPickerView 跳回顶部(第一行)。
当我删除“label.text = String(row);”行时UIPickerView 根本不跳转。
这很奇怪,我找不到这两个元素之间的任何关联。
提前感谢您的任何回复:)
【问题讨论】:
标签文本在跳回前是否设置正确还是每次都变为0? 是的,文本设置正确,然后 UIPicker 跳回 如果不设置标签文本,只打印字符串(行)怎么办?还会跳吗?我从来没有见过这个,也没有答案,所以我试图帮助你调试 哈哈我也不是很奇怪。打印字符串而不是设置文本有效(无跳转),我尝试注释掉不同的部分,并且仅在设置此标签的文本时才会发生。 如果我总是将文本设置为“0”,它会跳转一次,然后再正常工作。 【参考方案1】:原来这个“奇怪的魔法错误”是由于我在 viewDidLayoutSubviews() 中设置了 UIPickerViews 的默认值,因为另一个错误。
因此,每当元素发生变化时,都会调用 viewDidLayoutSubviews() 并再次设置 UIPickerView 的值,从而导致其跳转。
【讨论】:
以上是关于UIPickerView 抖动的主要内容,如果未能解决你的问题,请参考以下文章
从 UIPickerView 接收输入时如何更新 UITextField?
如何在 ViewController 之外符合 UIPickerViewDelegate 和 UIPickerViewDataSource?