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
相关产品推荐
相关产品推荐

