当前位置: 首页 > news >正文

[FSCalendar] 可定制的iOS日历组件 | docs | Interface Builder

链接:WenchaoD/FSCalendar: A fully customizable iOS calendar library, compatible with Objective-C and Swift

(ipad上已经diy用上了,邻居家的小孩很喜欢吃😋)

docs:FSCalendar日历组件

FSCalendar是一款功能强大且高度可定制的iOS日历库,能够帮助开发者轻松实现日历视图集成

提供灵活的网格布局展示日期,支持日期选择等交互操作,并具备丰富的样式定制动画效果,可流畅切换月/周视图模式。

可视化

在这里插入图片描述

章节

  1. FSCalendarCell (日期单元)
  2. 日历标题组件
  3. FSCalendar (主日历)
  4. FSCalendarAppearance (样式指南)
  5. FSCalendarDelegationProxy (代理中转)
  6. 日历集合视图网格
  7. FSCalendarCalculator (日期计算器)
  8. FSCalendarTransitionCoordinator (转场协调器)

(文档代码之后有机会窝给它更出来(下次一定bush🕳+1)

目录

截图展示

iPhone效果
fscalendar

iPad效果
fscalendar-ipad

安全方向适配
fscalendar-scope-orientation-autolayout

今日扩展
iOS8/9 | iOS10
today2

交互式范围手势
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

自定义支持

通过DIY示例自定义单元格样式(参见Example-Swift或Example-Objc)

滑动选择演示
单选模式 | 多选模式 | DIY模式
1

用户成果展示

2

更多作品详见FSCalendar图库

安装指南

CocoaPods

iOS8+推荐:

use_frameworks!
target '项目名称' dopod 'FSCalendar'
end

iOS7+兼容:

target '项目名称' dopod 'FSCalendar'
end

需配合NSCalendarExtension使用

Carthage

iOS8+:
github "WenchaoD/FSCalendar"

SPM

添加依赖:
.package(url: "https://github.com/WenchaoD/FSCalendar.git", from: "2.8.4")

手动集成

将FSCalendar文件夹所有文件拖入工程(支持IB设计)
或直接运行Example-Objc/Example-Swift中的UITest Target

配置方法

Interface Builder方式

  1. 添加UIView到ViewController场景
  2. 修改Custom Class为FSCalendar
  3. 关联dataSource和delegate
    fscalendar-ib
  4. 实现FSCalendarDataSource和FSCalendarDelegate协议

代码方式

Objective-C:

@property (weak, nonatomic) FSCalendar *calendar;
// 在loadView或viewDidLoad中
FSCalendar *calendar = [[FSCalendar alloc] initWithFrame:CGRectMake(0, 0, 320, 300)];
calendar.dataSource = self;
calendar.delegate = self;
[self.view addSubview:calendar];
self.calendar = calendar;

Swift:

private weak var calendar: FSCalendar!
// 在loadView或viewDidLoad中
let calendar = FSCalendar(frame: CGRect(x: 0, y: 0, width: 320, height: 300))
calendar.dataSource = self
calendar.delegate = self
view.addSubview(calendar)
self.calendar = calendar

Swift3需创建Bridge Header,详见Example-Swift

重要提示

FSCalendar不会自动更新frame,需实现以下方法:

自动布局:

- (void)calendar:(FSCalendar *)calendar boundingRectWillChange:(CGRect)bounds animated:(BOOL)animated {self.calendarHeightConstraint.constant = bounds.size.height;[self.view layoutIfNeeded];
}

手动布局:

calendar.frame = (CGRect){calendar.frame.origin, bounds.size};

Masonry:

[calendar mas_updateConstraints:^(MASConstraintMaker *make) {make.height.equalTo(@(bounds.size.height));
}];

SnapKit:

calendar.snp.updateConstraints { make inmake.height.equalTo(bounds.height)
}

基础须知

Swift3中NSDate和NSDateFormatter已重命名为Date和DateFormatter

日期对象操作

创建NSDate:

// 通过日历
self.gregorian = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
NSDate *date = [gregorian dateWithEra:1 year:2016 month:9 day:10 hour:0 minute:0 second:0 nanosecond:0];// 通过格式化
self.formatter = [[NSDateFormatter alloc] init];
self.formatter.dateFormat = @"yyyy-MM-dd";
NSDate *date = [self.formatter dateFromString:@"2016-09-10"];

日期计算:

// 获取下个月/天
NSDate *nextMonth = [gregorian dateByAddingUnit:NSCalendarUnitMonth value:1 toDate:date options:0];
NSDate *nextDay = [gregorian dateByAddingUnit:NSCalendarUnitDay value:1 toDate:date options:0];// 日期判断
BOOL isToday = [gregorian isDateInToday:date];
BOOL isWeekend = [gregorian isDateInWeekend:date];// 日期比较
BOOL sameDay = [gregorian isDate:date1 inSameDayAsDate:date2];
NSComparisonResult result = [gregorian compareDate:date1 toDate:date2 toUnitGranularity:NSCalendarUnitDay];
http://www.dtcms.com/a/489982.html

相关文章:

  • 中兴B860AV5.1-M2/B860AV5.2M_安卓9_S905L3SB_支持外置WIFI_线刷固件包
  • AI 模型部署体系全景:从 PyTorch 到 RKNN 的嵌入式类比解析
  • 全球汽车紧固件产业进入关键转型期,中国供应链加速融入世界市场
  • 17网站一起做网店下载自动发卡网站建设
  • PHP 类型比较
  • oracle:To_char
  • MySQL 数据库核心操作全解析:从创建到备份与连接管理
  • 环境函数 SYS_CONTEXT 在 DM8 与 Oracle 中的差异
  • 长春怎么做网站重庆网站建设aiyom
  • Linux中的管道与重定向:深入理解两者的本质区别
  • 上传OSS服务器图片文件视频(使用elemenplus上传组件)
  • 全面适配iOS 26液态玻璃,基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v10.2发布
  • 【Kubernetes】常见面试题汇总(二十五)
  • 阿里云渠道商:哪些方法能给服务器加速?
  • 华为USG 6320之配置外网访问服务器NAT映射和NAT回流
  • 网站开发业务介绍深圳网站搭建找哪里
  • 常见的网站模板类型有哪些,新手该如何选择最合适的?
  • 【Linux】基础IO(一)Linux 文件操作从入门到实践:系统调用、文件描述符、重定向,为自定义Shell添加重定向
  • Docker 深度解析:从虚拟化到新一代应用构建、运行与交付
  • 企业网站建设网站有哪些建企业网站用什么源码
  • 复制了一个vue的项目然后再这个基础上修改。可是通过npm run dev运行之前的老项目,发现运行的竟然是拷贝后的项目。为什么会这样?
  • 【Prisma】Prisma 命令大全(Node / NestJS 通用)
  • 十月连环效应:宏观叙事与链上机会的临界点
  • 第六部分:VTK进阶(第161章 多渲染Pass组合)
  • 三相变流器矢量控制及参数设计系列(2):PWM原理
  • 网络层IP协议详解:互联网的灵魂所在
  • 深圳网站公司推广平台wordpress网站统计
  • 数据结构4:线性表3-链式存储的线性表
  • 如何理解随机过程中“样本空间”的概念
  • 最新机器人顶会IROS 2025的award paper 深入分析