不同 iOS 版本中带有图像的 UIButton 的不同标题来源
Different title origin of UIButton with image inside in different iOS versions
- 我在界面生成器中创建了一个按钮。
- 为此按钮设置固定宽度 = 120 和高度 = 40 的约束条件。
- 在我将图像添加到按钮并设置图像插入后(上:10,左:0,下:10,右:100)将图像移动到左侧。
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 版本中看起来都一样?
我知道你想做什么,只是不知道。它会粉碎你尝试这样做,因为你认为它应该有效。而是这样做
- 像上面那样制作按钮
- 向按钮添加一个 UIImageView,因此 UIimageView 作为子视图添加到 UIButton
- 在 UIImageView 上添加约束,使图像视图位于按钮的最左侧
这就是您如何使用 iOS 使应该工作但不工作的东西工作,并且不需要子类化 UIButton 并使用它自己的内部图像视图进行一些疯狂的几何数学运算。
我的研究揭示了按钮绘制如此不同的可能原因。
原因是 imageView 的旧框架。
添加图像插图以将图像向左/向右移动后,图像框架发生变化。
我不知道 Apple 究竟是如何计算 title's origin of button 的。
在旧 iOS 中,标题的 origin.x 等于图像的旧 frame.width。
在 iOS 13 标题的来源改变了我的预期。
所以我决定在将 UIImage 放入 UIImageView 之前调整它的大小。
而且效果很好。
感谢大家提意见
- 我在界面生成器中创建了一个按钮。
- 为此按钮设置固定宽度 = 120 和高度 = 40 的约束条件。
- 在我将图像添加到按钮并设置图像插入后(上:10,左:0,下:10,右:100)将图像移动到左侧。
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 版本中看起来都一样?
我知道你想做什么,只是不知道。它会粉碎你尝试这样做,因为你认为它应该有效。而是这样做
- 像上面那样制作按钮
- 向按钮添加一个 UIImageView,因此 UIimageView 作为子视图添加到 UIButton
- 在 UIImageView 上添加约束,使图像视图位于按钮的最左侧
这就是您如何使用 iOS 使应该工作但不工作的东西工作,并且不需要子类化 UIButton 并使用它自己的内部图像视图进行一些疯狂的几何数学运算。
我的研究揭示了按钮绘制如此不同的可能原因。 原因是 imageView 的旧框架。 添加图像插图以将图像向左/向右移动后,图像框架发生变化。 我不知道 Apple 究竟是如何计算 title's origin of button 的。 在旧 iOS 中,标题的 origin.x 等于图像的旧 frame.width。 在 iOS 13 标题的来源改变了我的预期。
所以我决定在将 UIImage 放入 UIImageView 之前调整它的大小。 而且效果很好。
感谢大家提意见