UIAlertAction 按钮文本左对齐

Posted

技术标签:

【中文标题】UIAlertAction 按钮文本左对齐【英文标题】:UIAlertAction Button Text Alignment Left 【发布时间】:2017-11-18 20:42:37 【问题描述】:

我想将UIAlertAction 文本对齐到左对齐并添加如图所示的图标。我在谷歌上花了很多时间来获得解决方案,但没有找到正确的答案。每个正文都针对警报标题而不是警报操作标题。

请为我推荐 swift 的正确方法。

谢谢!!

【问题讨论】:

没有公共 API 可以使用 UIAlertController 执行此操作。 【参考方案1】:

您可以使用下面的示例代码来做到这一点。简单易行。

斯威夫特 4

let actionSheetAlertController: UIAlertController = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)

let cancelActionButton = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)
actionSheetAlertController.addAction(cancelActionButton)


let documentsActionButton = UIAlertAction(title: "Documents", style: .default, handler: nil)
actionSheetAlertController.addAction(documentsActionButton)
documentsActionButton.setValue(#imageLiteral(resourceName: "doccument"), forKey: "image")
documentsActionButton.setValue(kCAAlignmentLeft, forKey: "titleTextAlignment")

let cameraActionButton = UIAlertAction(title: "Camera", style: .default, handler: nil)
actionSheetAlertController.addAction(cameraActionButton)
cameraActionButton.setValue(#imageLiteral(resourceName: "camera"), forKey: "image")
cameraActionButton.setValue(kCAAlignmentLeft, forKey: "titleTextAlignment")

let galleryActionButton = UIAlertAction(title: "Gallery", style: .default, handler: nil)
actionSheetAlertController.addAction(galleryActionButton)
galleryActionButton.setValue(#imageLiteral(resourceName: "gallery"), forKey: "image")
galleryActionButton.setValue(kCAAlignmentLeft, forKey: "titleTextAlignment")

actionSheetAlertController.view.tintColor = kTHEME_COLOR
self.present(actionSheetAlertController, animated: true, completion: nil)

【讨论】:

单行代码 actionButton.setValue(kCAAlignmentLeft, forKey: "titleTextAlignment") 'kCAAlignmentLeft' 已从 swift 5 重命名为 'CATextLayerAlignmentMode.left'【参考方案2】:

kCAAlignmentLeft 的 swift 5.0 的更新版本(由@Niraj Solanki here 回答)是CATextLayerAlignmentMode.left 所以代码应该如下:

Swift 5.0

documentsActionButton.setValue(CATextLayerAlignmentMode.left, forKey: "titleTextAlignment")

【讨论】:

它适用于左对齐,但不适用于右对齐! 查看***.com/a/54284170/826946了解更多自定义选项【参考方案3】:

您可以使用下面的示例代码来做到这一点。 用您的图片替换图片名称

斯威夫特 3

 let actionSheet = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
 let camera = UIAlertAction(title: "Camera", style: .default)  (action) in
  // Do something
 
 let cameraImage = UIImage(named: "icon_camera")
 camera.setValue(cameraImage, forKey: "image")
 camera.setValue(0, forKey: "titleTextAlignment")
 actionSheet.addAction(camera)

【讨论】:

【参考方案4】:

正如在 cmets 中所说,UIAlertController 不提供对其视图的自定义。但是,您可以构建自己的操作表视图或使用一些第三方,例如 https://github.com/xmartlabs/XLActionController。

【讨论】:

【参考方案5】:

这种情况下最快和最简单的实现:

extension UIAlertAction 
    func addImage(_ image: UIImage)
        setValue(image, forKey: "image")
        setValue(0, forKey: "titleTextAlignment")
    

使用:

let editAction = UIAlertAction(title: "Edit", style: .default, handler: nil)
editAction.addImage(UIImage(systemName: "square.and.pencil")!)
alertSheet.addAction(editAction)

注意: CATextLayerAlignmentMode — 不是您需要的。因为右对齐不起作用!更好地使用数字文字:

0 - 左 1 - 中心 2 - 右

为了通用,我会创建这个枚举:

enum AlertActionAlignment:Int 
    case left, center, right


...
setValue(align.rawValue, forKey: "titleTextAlignment")

【讨论】:

以上是关于UIAlertAction 按钮文本左对齐的主要内容,如果未能解决你的问题,请参考以下文章

左对齐按钮的文本

iOS上如何让按钮文本左对齐问题

在Android中的按钮内左对齐文本

带有左图标和文本的按钮完全对齐

如何左对齐 Angular Material 拉伸 md 按钮中的文本?

iOS上如何让按钮(UIbutton)文本左对齐展示