在UIPickerView中使用2个组件水平移动隐藏的行

时间:2018-01-10 15:38:40

标签: ios swift uipickerview

我有一个UIPickerView,包含2个组件:

enter image description here

然而隐藏的行向中心移动。我认为这与UIPickerView在'轮子'之间放置的空间有关。

我没有在iOS中看到任何简短的文档,讨论如何防止这种情况。

这是我的代码:

func pickerView(_ pickerView: UIPickerView, widthForComponent component: Int) -> CGFloat
{
    return self.currenciesPicker.width / 2
}

func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat
{
    return 50.0
}

func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView
{
    var cell: CurrencyPickerCell

    if view == nil
    {
        let width  = self.pickerView(pickerView, widthForComponent: component)
        let height = self.pickerView(pickerView, rowHeightForComponent: component)
        cell = CurrencyPickerCell(frame: CGRect(x: 0.0, y: 0.0, width: width, height: height))
    }
    else
    {
        cell = view as! CurrencyPickerCell
    }

    let code = self.codes[row]
    cell.nameLabel.text   = Currency.names[code]
    cell.symbolLabel.text = Currency.symbols[code]

    return cell
}

当我让widthForComponent返回选择器大小减去20的一半时,单元格只显示小20点。这会在选取器视图的左端和右端创建空边框。它并没有改变这种奇怪的“视差”。

  • 有没有人知道造成这种情况的原因以及如何预防?

  • 我应该如何计算widthForComponent(正确的选择器宽度的一半)?

1 个答案:

答案 0 :(得分:1)

不幸的是,这就是UIPickerView控件的设计方式。它应该看起来像是从正上方看到的几个并排坐着的轮子。考虑到苹果公司所做的所有平面设计风格,但没有办法改变它,这有点奇怪。

唯一真正的选择是自己动手,完全手动或可能继承UIPickerView并自己处理绘图,或者使用第三方控件。