UIPickerView 中 UILabel 上的额外空间

问题描述

我有一个 UIPickerView 组件,我在需要时使用它——pickerView 有一个 viewmodel,所以我可以注入一个值数组,然后显示它。没有什么非常复杂的,只是视图中的一个选择器视图在标题中带有一些按钮来取消或确认选择。

enter image description here

您现在可以查看我当前的问题。 UIPickerTableViewTitledCell 包含一个 UILabel,它由于某种原因没有与左侧对齐 - 有一个小间隙。这很奇怪,因为它发生在我设置固定组件宽度(如上)以及我将组件设置为屏幕宽度时。

enter image description here

我试过了:

  • 查看选择器的内容模式 - 将其更改为 centre 似乎没有任何影响

  • 尝试使用属性并将它们与没有此问题的其他选择器(在不同组件中)进行比较

  • 看看pickerDelegate方法——它们似乎都很正常

     // MARK: - UIPickerViewDelegate
    
     func pickerView(_: UIPickerView,numberOfRowsInComponent component: Int) -> Int {
         return viewmodel?.numberOfRowsInPicker(forComponent: component) ?? 0
     }
    
     func pickerView(_: UIPickerView,titleForRow row: Int,forComponent component: Int) -> String? {
         return viewmodel?.titleFor(row,forComponent: component)
     }
    
     func numberOfComponents(in _: UIPickerView) -> Int { viewmodel?.numberOfComponentsInPicker ?? 1 }
    
     func pickerView(_: UIPickerView,widthForComponent component: Int) -> CGFloat {
         if let width = viewmodel?.width(forComponent: component) {
             return width
         }
    
         return UIScreen.main.bounds.width / CGFloat(viewmodel?.numberOfComponentsInPicker ?? 1)
     }
    

这些都没有做任何特别或与您期望的不同的事情。

我在pickerView上包含了一张xib文件的图像:

enter image description here

我的最终解决方案可能是逐步重新创建组件,以查看问题是否在一段时间后发生,但理想情况下,我想了解为什么会发生这种情况,而不仅仅是消失。

解决方法

您的选择器视图对于屏幕来说似乎太宽了。默认情况下,当您使用 titleForRow 时,生成的标签在两侧具有相同的边距,如下所示:

enter image description here

我们看不到选取器视图右侧的边距这一事实表明选取器视图的右侧位于屏幕右侧的某个位置。无论屏幕大小如何,都可以使用自动布局约束来正确定位选择器视图。