FSCalendar具有高度的可定制性:
- FSCalendarAppearance:用于全局外观属性的定制。
- FSCalendarDelegateAppearance:针对某天外观属性的定制。
外观分类
<a id='text_color'></a>文字颜色
- FSCalendarAppearance
- FSCalendarDelegateAppearance
<a id='font'></a>字体
单元格中的字体大小默认是自适应的,需要先关闭自适应。否则字体尺寸不会发生改变。
calendar.appearance.adjustsFontSizeToFitContentSize = NO; // 关闭文字尺寸自适应
<a id='common_color'></a>背景、边框、事件圆点
- FSCalendarAppearance
- FSCalendarDelegateAppearance
<a id='other'></a>其他属性
// 1.0=圆,0.0=正方形,0.0-1.0之间的值为圆角
@property (assign, nonatomic) CGFloat borderRadius;
**例: **
calendar.appearance.borderRadius = 0; // 设置正方形单元格
或实现
FSCalendarDelegateAppearance
的-calendar:appearance:borderRadiusForDate:
方法
效果:
@property (assign, nonatomic) FSCalendarCaseOptions caseOptions;
// 定义
typedef NS_OPTIONS(NSUInteger, FSCalendarCaseOptions) {
// 月文字
FSCalendarCaseOptionsHeaderUsesDefaultCase = 0, // June 2016
FSCalendarCaseOptionsHeaderUsesUpperCase = 1, // JUNE 2016
// 周文字
FSCalendarCaseOptionsWeekdayUsesDefaultCase = 0 << 4, // Sun、Mon、Tue、Wed、Thu、Fri、Sat; 周日、周一、周二、周三、周四、周五、周六
FSCalendarCaseOptionsWeekdayUsesUpperCase = 1 << 4, // SUN、MON、TUE、WED、THU、FRI、SAT; 周日、周一、周二、周三、周四、周五、周六
FSCalendarCaseOptionsWeekdayUsesSingleUpperCase = 2 << 4, // S、M、T、W、T、F、S; 日、一、二、三、四、五、六
};
例:
calendar.appearance.caseOptions = FSCalendarCaseOptionsHeaderUsesUpperCase | FSCalendarCaseOptionsWeekdayUsesUpperCase;
效果:
@property (strong, nonatomic) NSString *headerDateFormat;
代表显示的月份格式。
例:
calendar.appearance.headerDateFormat = @"yyyy年MM月";
效果:
/**
* The alpha value of month label staying on the fringes.
*/
@property (assign, nonatomic) CGFloat headerMinimumDissolvedAlpha;
这个属性控制‘上个月’和‘下个月’标签在静止时刻的透明度。
例:
calendar.appearance.headerMinimumDissolvedAlpha = 0;
效果:
项目主页: https://github.com/WenchaoD/FSCalendar
QQ支持群: 323861692
网友评论
Designables: Failed to render and update auto layout status for UIView (i5M-Pr-FkT): dlopen(FSCalendar.framework, 1): no suitable image found. Did find:
FSCalendar.framework: required code signature missing for 'FSCalendar.framework'
可以修改FSCalendarConstants.h文件中52行,#define FSCalendarStandardLineColor [[UIColor lightGrayColor] colorWithAlphaComponent:0.00]
self.calendar.appearance.todaySelectionColor 和
- (UIColor *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance fillSelectionColorForDate:(NSDate *)date
这两个都不行
请问“calendarWeekdayView”和“cell”的背景色设成非白色时,
“calendarWeekdayView”和日历的第一行cell之间的空白条怎么去掉啊?
- (void)calendarCurrentPageDidChange:(FSCalendar *)calendar
{
NSString *monthFomater = [self.dateFormatter2 stringFromDate:calendar.currentPage];
[_fillSelectionColors1 removeAllObjects];
if (_curentPageCallBack) {
_curentPageCallBack(monthFomater);
}
}
对数组进行清空再根据后台返回对数组再赋值再在这个方法进行刷新
NSString *key = [self.dateFormatter2 stringFromDate:date];
if ([_fillDefaultColors1 containsObject:key]) {
return C_MAIN_COLOR;
}
return nil;
发现数组可能没有被及时清空 这有办法解决吗?
2017-08-05 09:31:01.734159 FSCalendarTest[1508:403318] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'
*** First throw call stack: 这是什么原因呢?请问
{
if ([self.self.gregorianCalendar isDateInToday:date]) {
return @"今日";
}
return nil;
}
想請問要做成像github上iphone截圖的第五張那樣的整頁日曆該怎麼實作啊?demo好像沒看到這樣頁面的實作
// 我是使用此方法 将请求到的日期改变背景色
- (UIColor *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance fillDefaultColorForDate:(NSDate *)date;
//但是没找到改变日期文字颜色的方法
将源码中
FSCalendar.h 中 selectedDates 属性 改为可写的 NSMutableArray,并在.m中做相应简单修改。
将后台传来的日期 做如下处理 **如果缺少这一步则不能正常显示选中状态 ** ( 假设传来的是字符串形式 “2017-05-01”)
self.dateFormatter = [[NSDateFormatter alloc] init];
self.dateFormatter.dateFormat = @"yyyy-MM-dd";
NSDate *date = [self.dateFormatter dateFromString:@"2017-05-01"];
self.calendar.selectedDates = [NSMutableArray arrayWithArray:@[date]];
[self.calendar reloadData];
这个我怎么改不成这种显示啊
//@interface
@property (strong, nonatomic) NSCalendar *gregorian;
@property (nonatomic, strong) NSCalendar * lunarCalendar;
@property (strong, nonatomic) NSArray *datesWithEvent;
@property (strong, nonatomic) NSCache *cache;
@property (strong, nonatomic) NSDate *minimumDate;
@property (strong, nonatomic) NSDate *maximumDate;
@property (strong, nonatomic) NSArray<EKEvent *> *events;
@property (strong, nonatomic) NSArray<NSString *> *lunarChars;
//FSCalendarDataSource
- (NSDate *)minimumDateForCalendar:(FSCalendar *)calendar
{
return self.minimumDate;
}
- (NSDate *)maximumDateForCalendar:(FSCalendar *)calendar
{
return self.maximumDate;
}
- (NSString *)calendar:(FSCalendar *)calendar subtitleForDate:(NSDate *)date
{
if ([self.gregorian isDateInToday:date]) {
return nil;
}
EKEvent *event = [self eventsForDate:date].firstObject;
if (event) {
return event.title;
}
NSInteger day = [self.lunarCalendar component:NSCalendarUnitDay fromDate:date];
return _lunarChars[day-1];
}
进入默认周选择,直接滑动,会出现headerView时间显示错误问题。
let rocCalendar = NSCalendar.init(identifier: NSCalendar.Identifier.republicOfChina)
formatter.calendar = rocCalendar as Calendar!
這樣點選日曆後確實可以改成為其他國家的日曆,但headerView上的年月還是顯示2016.11
請問要如還才能讓headerView,變成我所設定的國家日曆 如:105.11
比如,我要做一个类似于iOS 原生日历的那种 上下滑动 也类似于曾经的sunrise日历
就是月视图连着一起,中间没有月份啥的
星期几也是不用显示的,我看demo中有一个FSCalendarPlaceholderType,不知道现在为啥没有了,
我以前也参与过 iOS版本的万年历开发,哈哈,当时那些代码写得很不好,但是毕竟是早期,技术不到位,现在想自己开发一款基于时间的app,希望可以和作者多沟通。
非常感谢@竹园小伙的肯定哈。