UIPickerView 中的 UILabel 上的额外空间

Posted

技术标签:

【中文标题】UIPickerView 中的 UILabel 上的额外空间【英文标题】:Additional space on UILabel in UIPickerView 【发布时间】:2021-02-15 23:22:44 【问题描述】:

我有一个 UIPickerView 组件,我在需要时使用它 - pickerView 有一个 viewModel,因此我可以注入一个值数组,然后显示它。没有什么很复杂的事情,只是在一个视图中的一个 pickerView 与标题中的一些按钮来取消或确认选择。

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

我试过了:

查看选择器的内容模式 - 将其更改为 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 文件的图像:

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

【问题讨论】:

选择器视图是否位于表格视图单元格内? 不只是在当前屏幕上呈现的 UIViewController 内的 UIView 内 你能告诉我们如何做到这一点吗?显然,您知道世界上的每个选择器视图都不会发生这种情况,因此请通过让我们重现您正在做的事情来帮助我们实现它。 您似乎没有使用约束?如果你是,请也发布 - 以及重复问题的内容。 我在视图中添加了一个额外的 PickerView 图像以及应用于它的约束。如您所见,我只是限制视图本身 - 不对内部标签做任何事情(我不知道是否可以影响内部标签,即使我想这样做) 【参考方案1】:

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

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

【讨论】:

当我将我的 pickerView 约束在屏幕内时,同样的情况发生了 - 选择器通过我仍然偏移的标签适合屏幕 我证明它不是偏移量。

以上是关于UIPickerView 中的 UILabel 上的额外空间的主要内容,如果未能解决你的问题,请参考以下文章

UIPickerView去掉背景上的黑线

如何让 UIPickerview 自动更新 UILabel

使用 UIButton 从 UIPickerView 向 UILabel 显示输出

从 UIPickerView 中选择的 NSTimer 在 UILabel 中显示秒数

UIPickerView 选定行标签颜色

UIPickerView 抖动