【问题标题】:UIPickerView rendering incorrectly after iOS 14/Xcode 12.0.1 updateiOS 14/Xcode 12.0.1 更新后 UIPickerView 渲染不正确
【发布时间】:2021-01-13 02:46:01
【问题描述】:

有人注意到您应用程序的 UIPickerViews 中的文本呈现不正确,第一个字符被截断了吗?我在多个设备上的应用程序的所有 UIPickerViews 中都看到了这一点。在大多数情况下,您可以看到第一个字符的几个像素。

我已尝试从手机中删除派生数据和应用程序,但没有骰子。

我不确定哪个更新可能引发了该问题,但它只是在一个已经稳定数月的项目中开始的。标签代码:

func pickerView(_ pickerView: UIPickerView,
                viewForRow row: Int,
                forComponent component: Int,
                reusing view: UIView?) -> UIView
{
    let pickerLabel = UILabel()
    pickerLabel.text = "Rec.709"
    pickerLabel.font = UIFont(name: "Ropa Sans", size: 18)
    pickerLabel.textColor = UIColor.white
    pickerLabel.textAlignment = NSTextAlignment.left
}

【问题讨论】:

  • 上面的链接在同一页面上,你有什么解决办法吗?
  • Apple 尚未修复;到目前为止,我的解决方案是使用居中文本而不是左对齐。试试这个链接到另一个报告:stackoverflow.com/questions/63948881/…

标签: xcode text rendering uipickerview


【解决方案1】:

没有对我的 PickerViews 进行任何更改,但自从更新到 iOS 14 后我遇到了完全相同的问题。似乎 Apple 在 PickerView 实现中进行了一些更改。

我的 ViewForRow 函数返回一个包含三个标签的水平 UIStackView。我可以通过在第一个标签的前缘和最后一个标签的后缘添加 15 点偏移约束来暂时解决这个问题:

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

    var stackView: UIStackView

    if view != nil {
        stackView = view as! UIStackView
    } else {

        let leftLabel = UILabel()
        let ctrLabel = UILabel()
        let rightLabel = UILabel()

        stackView = UIStackView(arrangedSubviews:[leftLabel, ctrLabel, rightLabel])
        stackView.axis = .horizontal
        stackView.distribution = .fill

    // Temporary fix.
        leftLabel.leadingAnchor.constraint(equalTo: stackView.leadingAnchor, constant: 15.0).isActive = true
        rightLabel.trailingAnchor.constraint(equalTo: stackView.trailingAnchor, constant: -15.0).isActive = true

    // Set text of labels here...

    return stackView
}

我还不能检查,但我担心这个额外的余量现在在仍然运行旧 iOS 版本的设备上可能看起来很奇怪。

【讨论】:

  • 我认为目前最好的解决方法是使用居中文本;至少这样您就没有硬编码在各种设备和版本上可能确实看起来很奇怪的边距。
【解决方案2】:

我发现只有最左边的组件的左对齐字符串被截断(例如,我有一个包含 3 个组件的 multipicker 视图,所有这些都是左对齐的。只有最左边的组件被截断。

我发现只修改字符串以用几个额外的前导空格填充它们更容易 - 我使用字典来存储字符串,所以它们都在一个地方(并且仅用于显示,所以我不不必担心使用值)。在我的情况下工作得很好。如果 Apple 解决了该问题,则很容易恢复(如有必要)。

【讨论】:

  • 这个错误还没有被修复真是太可怜了。感谢您的更新。
猜你喜欢
  • 2021-02-12
  • 2021-02-25
  • 2021-11-16
  • 2017-01-18
  • 1970-01-01
  • 2021-08-20
  • 2011-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多