不同 iOS 版本中带有图像的 UIButton 的不同标题来源

Different title origin of UIButton with image inside in different iOS versions

UIButton insets screenshot

问题: 在不同的 iOS 版本中(在我的例子中是:10.3.1、12.1 和 13.1),按钮的绘制方式不同。 按钮的标题来源是 (x = 29.5, y = 11) for iOS 13.1 和 (x = 44, y = 11) for older iOS.

Simulators screenshot

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

我知道你想做什么,只是不知道。它会粉碎你尝试这样做,因为你认为它应该有效。而是这样做

  1. 像上面那样制作按钮
  2. 向按钮添加一个 UIImageView,因此 UIimageView 作为子视图添加到 UIButton
  3. 在 UIImageView 上添加约束,使图像视图位于按钮的最左侧

这就是您如何使用 iOS 使应该工作但不工作的东西工作,并且不需要子类化 UIButton 并使用它自己的内部图像视图进行一些疯狂的几何数学运算。

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

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

感谢大家提意见