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

如何为FSCalendar工作日设置背景色并保留选中日期高亮效果?

为FSCalendar工作日设置背景色并保留选中高亮效果

问题说明

在iOS应用中使用FSCalendar时,希望自定义周一至周五的日期单元格背景色,同时保留选中日期的橙色高亮效果。当前代码仅修改了顶部星期标题栏的标签背景色,无法实现日期区域的背景色设置。

当前使用的代码:

if let weekdayView = calendar.calendarWeekdayView {
    for label in weekdayView.weekdayLabels {
        label.backgroundColor = UIColor.lightGray.withAlphaComponent(0.2) // 修改星期标题背景色
        label.textColor = .black
        label.layer.cornerRadius = 10
        label.layer.masksToBounds = true
    }
}
calendar.appearance.selectionColor = UIColor.orange

解决方案

要实现日期单元格的背景色自定义,需要借助FSCalendarDelegateAppearance协议的代理方法,同时保证选中颜色的优先级。

步骤1:遵循代理协议

让视图控制器遵循FSCalendarDelegate和FSCalendarDelegateAppearance协议:

class YourViewController: UIViewController, FSCalendarDelegate, FSCalendarDelegateAppearance {
    // 关联日历控件
    @IBOutlet weak var calendar: FSCalendar!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        calendar.delegate = self
        // 保持选中日期的高亮颜色
        calendar.appearance.selectionColor = .orange
    }
}

步骤2:实现日期填充色代理方法

通过calendar:appearance:fillDefaultColorForDate:方法,为周一至周五的日期设置背景色,周末返回nil使用默认样式:

func calendar(_ calendar: FSCalendar, appearance: FSCalendarAppearance, fillDefaultColorFor date: Date) -> UIColor? {
    let sysCalendar = Calendar.current
    let weekday = sysCalendar.component(.weekday, from: date)
    // 注:Calendar.current的weekday取值为1(周日)、2(周一)...6(周五)、7(周六)
    if weekday >= 2 && weekday <= 6 {
        return UIColor.lightGray.withAlphaComponent(0.2)
    }
    return nil
}

效果说明

  • 周一至周五的日期单元格会显示浅灰色半透明背景
  • 选中任意日期时,selectionColor设置的橙色会自动覆盖背景色,保留高亮效果
  • 顶部星期标题栏的样式可根据需要保留或删除原代码(如果不需要修改标题栏,可移除相关代码)

效果对比

  • 原始效果:仅顶部星期标题标签有浅灰色背景,日期单元格无背景,选中日期为橙色高亮
  • 预期效果:周一至周五的日期单元格有浅灰色半透明背景,选中日期保持橙色高亮

内容的提问来源于stack exchange,提问作者Sham Dhiman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 23:16:10