将 UIButton 上标题右侧的图像与 imageEdgeInsets 和 titleEdgeInsets 对齐

Posted

技术标签:

【中文标题】将 UIButton 上标题右侧的图像与 imageEdgeInsets 和 titleEdgeInsets 对齐【英文标题】:Aligning image on right side of title on UIButton with imageEdgeInsets and titleEdgeInsets 【发布时间】:2016-05-04 07:17:37 【问题描述】:

我想在标题右侧添加一张类似这样的图片

|Button  [image]|
|title          |

我可以通过这段代码实现这一点

button.titleEdgeInsets = UIEdgeInsetsMake(0, -10, 0, 0)
button.imageEdgeInsets = UIEdgeInsetsMake(0, 135, 0, 5)

但是当标题很大时,标题标签和图片会相互交叉。 如何打破标题标签?

【问题讨论】:

检查答案。它永远不会与图像相交。 【参考方案1】:

这个扩展对我有用:

扩展名:

extension UIButton 
  func imageToRight() 
      transform = CGAffineTransform(scaleX: -1.0, y: 1.0)
      titleLabel?.transform = CGAffineTransform(scaleX: -1.0, y: 1.0)
      imageView?.transform = CGAffineTransform(scaleX: -1.0, y: 1.0)
  

用法:

button.imageToRight()

iOS 15 更新

如此处所述:Meet the UIKit Button System

    创建您的按钮配置 从 .plain()、.gray()、.tinted() 或 .filled() 中选择

    var config = UIButton.Configuration.filled()

    为您的图片选择展示位置 从全部、顶部、底部、尾随、前导、无中选择

    config.imagePlacement = .trailing

    将配置分配给您的按钮

    让 myButton = UIButton(configuration: config, primaryAction: ...)

【讨论】:

是的,确实如此。上面显示的扩展按预期工作。将图像放在按钮标题的右侧。【参考方案2】:

试试这个,它永远不会使标题和图像相互交叉。我在故事板的中心创建了一个按钮。 @IBOutlet weak var myButton: UIButton!

  let somespace: CGFloat = 10

  self.myButton.setImage(UIImage(named: "cross"), forState: UIControlState.Normal)

  self.myButton.imageEdgeInsets = UIEdgeInsetsMake(0, self.myButton.frame.size.width - somespace , 0, 0)

  print(self.myButton.imageView?.frame)

  self.myButton.titleEdgeInsets = UIEdgeInsetsMake(0, (self.myButton.imageView?.frame.width)! + somespace, 0, 10 )

如果你想要按钮的多行标题更改按钮标题的换行模式

self.myButton.titleLabel!.lineBreakMode = NSLineBreakMode.ByWordWrapping

Swift 3.0

在 swift 3.0 中,您可以在界面生成器中轻松完成。

选择 UIButton -> Attributes Inspector -> 转到大小检查器并修改图像或标题插图。如果您想要按钮右侧的图像,只需在语义视图实用程序中选择力Right-to-left

.

【讨论】:

嘿,快速评论一下,实际上使用语义内容属性并不是一个好主意。它搞砸了可访问性,尤其是 VoiceOver。如果您向右滑动以导航到下一个元素,并且您到达一个强制为 .forceRightToLeft 的按钮,则向右滑动实际上会反转 VoiceOver 的导航,并将焦点移回前一个元素。如果您再次向右滑动,您将回到强制从右向左的按钮上,依此类推。因此,用户基本上陷入了焦点陷阱,这可能会让人感到困惑。 确实如此。这只是一个黑客。如果有人在他们的项目中使用可访问性并支持多种语言,则不应使用它。

以上是关于将 UIButton 上标题右侧的图像与 imageEdgeInsets 和 titleEdgeInsets 对齐的主要内容,如果未能解决你的问题,请参考以下文章

仅当用户点击图像视图时,才在 UIScrollView 上显示 UIButton Done for Images

如何将 UIButton 与右侧的 UILabel 对齐。喜欢 instagram 的评论

UIButton ImageView 仅显示颜色填充

为具有图像的 UIButton 设置标题

如何将 UIButton 设置为 Touch ID 或 Face ID 图像

如何动态更改自定义 UIButton 图像