You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PKAddPassButton创建带本地化的Apple Wallet按钮及解决图标问题

解决PKAddPassButton图标不显示与本地化问题

我之前也碰到过类似的情况,咱们一步步来排查和解决:

一、修复Wallet图标不显示的问题

  • 确认PassKit框架已正确集成:虽然你已经写出了按钮代码,但还是要检查下项目里有没有添加PassKit框架。打开Xcode项目设置 → General → Frameworks, Libraries, and Embedded Content,看看列表里有没有PassKit.framework,没有的话点击+号添加即可。
  • 使用系统推荐的按钮尺寸:你手动硬写的frame可能不符合系统对这个按钮的尺寸规范,PKAddPassButton有自带的最优尺寸,建议用sizeThatFits(_:)来获取合适大小,避免图标被挤压或截断:
    let passButton = PKAddPassButton(addPassButtonStyle: .black)
    let buttonSize = passButton.sizeThatFits(view.bounds.size)
    // 让按钮水平居中,保持你设置的垂直位置
    passButton.frame = CGRect(x: (view.bounds.width - buttonSize.width)/2, 
                              y: 340.0, 
                              width: buttonSize.width, 
                              height: buttonSize.height)
    view.addSubview(passButton)
    
  • 排查测试环境问题:如果是在旧版本iOS模拟器上测试,可能存在图标渲染bug,建议切换到iOS 14+的真机或者最新版模拟器试试;另外确保测试设备上的Wallet应用是正常可用状态(虽然概率极低,但可以排除这个可能性)。
  • 不要随意修改按钮样式:如果之后给按钮自定义了tintColor或背景色,可能会覆盖系统自带的图标和文字样式,尽量只通过addPassButtonStyle切换黑/白预设风格。

二、实现按钮的本地化

PKAddPassButton本身支持系统自动本地化,不需要你手动修改文字,做好这两步就行:

  • 添加项目本地化语言:在Xcode项目设置 → Info → Localizations里,点击+号添加你需要支持的语言(比如简体中文、英文等),勾选对应的资源文件完成配置。
  • 跟随系统语言自动切换:按钮的文字会根据用户设备的系统语言自动变化,比如系统是中文时显示「添加到Apple Wallet」,英文时显示「Add to Apple Wallet」。除非有特殊需求,不建议强制指定按钮语言,这不符合用户的使用习惯。

最后补充一个最佳实践:给按钮添加点击事件时,要正确处理Pass的添加流程,示例代码如下:

passButton.addTarget(self, action: #selector(addPassTapped), for: .touchUpInside)

@objc func addPassTapped() {
    // 替换成你获取PKPass对象的逻辑,比如从网络下载或本地读取
    guard let targetPass = yourPassInstance else { return }
    
    let passLibrary = PKPassLibrary()
    if passLibrary.containsPass(targetPass) {
        // 提示用户卡片已存在
        let alert = UIAlertController(title: "提示", message: "该卡片已添加至Wallet", preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: "确定", style: .default))
        present(alert, animated: true)
    } else {
        let addPassVC = PKAddPassViewController(pass: targetPass)
        addPassVC.delegate = self
        present(addPassVC, animated: true)
    }
}

// 记得实现PKAddPassViewControllerDelegate协议
extension YourViewController: PKAddPassViewControllerDelegate {
    func addPassViewControllerDidFinish(_ controller: PKAddPassViewController) {
        controller.dismiss(animated: true)
    }
}

按照上面的步骤调整后,按钮的图标应该就能正常显示,本地化也会自动生效啦。

内容的提问来源于stack exchange,提问作者Shailesh Chandavar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:39:19