【问题标题】:Different title origin of UIButton with image inside in different iOS versions不同iOS版本中带有图片的UIButton标题来源不同
【发布时间】:2020-02-19 04:48:45
【问题描述】:
  • 我在界面生成器中创建了一个按钮。
  • 为此按钮设置固定宽度 = 120 和高度 = 40 约束。
  • 将图像添加到按钮并设置图像插入(顶部:10,左侧:0,底部:10,右侧:100)以将图像移动到左侧。

UIButton insets screenshot

问题: 在不同的 iOS 版本(在我的情况下是:10.3.1、12.1 和 13.1)中,按钮的绘制方式不同。 对于 iOS 13.1,按钮的标题原点是 (x = 29.5, y = 11),对于旧版 iOS,按钮的标题原点是 (x = 44, y = 11)。

Simulators screenshot

如何让按钮在所有 iOS 版本中看起来都一样?

【问题讨论】:

  • "设置固定宽度 = 120" 但这不是问题吗?如果使用自动布局,宽度可以自动正确设置。此外,我不能真正推荐使用内容插图移动片段的技术;相反,继承 UIButton 并负责碎片的去向。

标签: ios uibutton uiedgeinsets


【解决方案1】:

我知道你想做什么,只是不知道。它会粉碎你试图这样做,因为你认为它应该起作用。而是这样做

  1. 按照上面的方法制作按钮
  2. 给按钮添加一个UIImageView,这样UIimageView就会作为子视图添加到UIButton中
  3. 在 UIImageView 上添加约束,使图像视图位于按钮的最左侧

这就是你如何使用 iOS 来使应该工作但不能工作的事情工作,并且不需要子类化 UIButton 并用它自己的内部图像视图做一些疯狂的几何数学。

【讨论】:

    【解决方案2】:

    我的研究揭示了按钮绘制如此不同的可能原因。 原因是 imageView 的旧框架。 添加图像插入以将图像向左/向右移动后,图像框架会发生变化。 我不知道Apple如何准确计算标题的按钮来源。 在较旧的 iOS 标题中,origin.x 等于图像的旧 frame.width。 在 iOS 13 中,标题的来源按我的预期发生了变化。

    所以我决定在将 UIImage 放入 UIImageView 之前调整它的大小。 而且效果很好。

    感谢所有提供建议的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-12
      • 2018-04-10
      • 2021-07-21
      • 1970-01-01
      • 1970-01-01
      • 2012-03-24
      • 1970-01-01
      相关资源
      最近更新 更多