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?

可以更改 UIPickerView 的全局文本颜色吗?

在 iOS 7 中重用 UIPickerView 中的视图

如何在 ViewController 之外符合 UIPickerViewDelegate 和 UIPickerViewDataSource?

iOS核心笔记——UIPickerView

UIPickerView 和 UITextField 从 UIPickerView 获取值