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

EKEventEditViewController添加/取消按钮不可见但可点击的修复咨询

修复EKEventEditViewController按钮不可见问题

你遇到的问题是系统自带的EKEventEditViewController导航栏按钮(Add/Cancel)因颜色与深蓝色导航栏冲突导致不可见,以下是几种可行的修复方案:

方案一:临时修改全局导航栏按钮颜色并恢复

弹出控制器前保存原有导航栏按钮颜色,设置为白色适配深蓝色背景,弹出完成后恢复原设置,避免影响其他页面:

// 保存原有导航栏按钮 tint 颜色
let originalTintColor = UINavigationBar.appearance().tintColor
// 临时设置按钮颜色为白色
UINavigationBar.appearance().tintColor = .white

let eventController = EKEventEditViewController()
eventController.event = event
eventController.eventStore = eventStore
eventController.editViewDelegate = self

// 弹出控制器,完成后恢复原有颜色
self.present(eventController, animated: true) {
    UINavigationBar.appearance().tintColor = originalTintColor
}

方案二:针对EKEventEditViewController单独设置样式

通过UIAppearance指定仅对EKEventEditViewController的导航栏应用按钮颜色设置,无需临时修改全局样式:

// 可在App启动时或弹出控制器前执行此设置
UINavigationBar.appearance(whenContainedInInstancesOf: [EKEventEditViewController.self]).tintColor = .white

// 正常初始化并弹出控制器
let eventController = EKEventEditViewController()
eventController.event = event
eventController.eventStore = eventStore
eventController.editViewDelegate = self
self.present(eventController, animated: true, completion: nil)

方案三:自定义导航栏外观(iOS 13+)

针对iOS 13及以上系统,直接修改EKEventEditViewController导航栏的UINavigationBarAppearance,精准控制按钮和导航栏样式:

let eventController = EKEventEditViewController()
eventController.event = event
eventController.eventStore = eventStore
eventController.editViewDelegate = self

// 配置导航栏外观
if let navigationBar = eventController.navigationController?.navigationBar {
    let appearance = UINavigationBarAppearance()
    // 保持导航栏背景色与你的应用一致(如果需要)
    appearance.backgroundColor = UIColor(red: 0/255, green: 51/255, blue: 102/255, alpha: 1.0)
    // 设置按钮文本颜色为白色
    appearance.buttonAppearance.normal.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
    appearance.buttonAppearance.highlighted.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
    
    navigationBar.standardAppearance = appearance
    navigationBar.scrollEdgeAppearance = appearance
}

self.present(eventController, animated: true, completion: nil)

问题原因说明

你的应用全局导航栏样式可能未正确覆盖系统EKEventEditViewController的默认设置,导致按钮颜色与深蓝色背景对比度不足,出现视觉上不可见但可点击的情况。以上方案通过针对性调整按钮颜色或导航栏外观,解决颜色冲突问题。

内容的提问来源于stack exchange,提问作者Mikey A. Leonetti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 11:10:27