FSCalendar使用介绍(三) - 订制外观

作者: WenchaoD | 来源:发表于2016-07-03 18:02 被阅读15992次

    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
    

    相关文章

      网友评论

      • 昵称_木头:你好,我在用 pod 'FSCalendar' 倒入后,用xib创建试图时报错
        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'
      • 饭饭男:写的挺好,就是有些命名比较随意,而且注释太少了,不适合新手阅读。
      • 小小的路灯:请问怎么让日期可选?
      • 兰德耍:大神。我想请问一下headerview 这个如何悬停在最上面不一起滑动呢 就是现实年月的那个
      • 0715c4bee8ac:如何设置当前整个月的背景色,使其背景颜色区别去当前页面中其他月份的背景色
      • 帅帅滴小胖次:您好,calendar.rowHeight在calendar.pagingEnabled = NO才有效。如果calendar.pagingEnabled = YES的情况下,怎么也能设置rowHeight有效啊?麻烦告知一下,谢谢了
      • 帅帅滴小胖次:您好,calendar.rowHeight在calendar.pagingEnabled = NO才有效。如果calendar.pagingEnabled = YES的情况下,怎么也能设置rowHeight有效啊?麻烦告知一下,谢谢了
        帅帅滴小胖次:@殇丶无痕 没,后面叫产品改了需求
        殇丶无痕:你好,你这个 问题解决了吗,遇到相同的问题了
      • 雨幕孤星:消除FSCalendar最上和最下的分割线
        可以修改FSCalendarConstants.h文件中52行,#define FSCalendarStandardLineColor [[UIColor lightGrayColor] colorWithAlphaComponent:0.00]
        路有点颠簸:除了改内部文件就没其他外部属性修改了吗
      • Lionel_Messi:你好 ,怎么消除FSCalendar中最上面和最下面的两条分割线呢?
      • 蛮大人_3b6c:日历 headview 中的 显示年月日的 label 可以设置上下偏移么
      • 26f0d556c1e9:事件的小圆点设置为不同的颜色,点击的时候又变成默认色,能不能点击的时候颜色不变?
      • 蛮大人_3b6c:建议作者把 todayColor 属性改名为 todayDefaultColor 这样和todaySelectionColor表达方式一直,更能让大家理解。
        26f0d556c1e9:事件的小圆点设置为不同的颜色,点击的时候又变成默认色,能不能点击的时候颜色不变?
        蛮大人_3b6c:我这是吹毛求疵 ^_^ 不要见怪 作者大神
      • 蛮大人_3b6c:呀 我自己设置错了 最大时间小于今天时间 所以不能选中今天 SB了 O(∩_∩)O
        蛮大人_3b6c:感谢作者的辛苦付出,很赞的日历 满足各方面需求,大牛牛牛!!!!!
      • 蛮大人_3b6c:请问怎么设置 当天 选中的cell 背景色 ?
        self.calendar.appearance.todaySelectionColor 和
        - (UIColor *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance fillSelectionColorForDate:(NSDate *)date
        这两个都不行
      • 7492ccc176ab:博主您好 现在有三个需求1. 日历怎么设置只显示当月的日期,上个月的日期不显示 2.今天所在月 之前的月份不显示 也不能滚动 3.怎么设置今天所在日期之后的6个月的日期不能滚动,日期也不能被点击
      • dc7873ebb064:你好,请问在周模式下怎么显示placeholder
      • 最讨厌梅雨天啦:怎么获取到我的目标页的月份呢?我需要得到翻页后的月份
        闪现撞墙啦宝宝:问个问题,怎么获取当前月份的总天数?或者当前月份的第一天和最后一天?
      • Beyond无状态:博主 请问我要对接下来的三个月做处理 不能用appearance 该怎么做呢
      • fero2004:EventDot 的大小怎么改变呢
      • Laki只是想做一个程序猿:打扰下,怎么设置最多只能选到今天? ButtonsViewController 这个控制器里面
      • 木马sun:git 上面下载完打开就是一堆错误 哎
      • 木马sun:请问 swift 3.0 项目 如何使用这个日历
      • 51be56886b95:太赞了:clap:
        请问“calendarWeekdayView”和“cell”的背景色设成非白色时,
        “calendarWeekdayView”和日历的第一行cell之间的空白条怎么去掉啊?
      • Ausxin:作者您好,周的显示label 文本是英文的 我怎么更改成中文的呢
      • CCloud:👍👍👍
      • 未来行者:如何将日历的周名,从周日,周六,周一,变成日,一,二,这种
      • c7757855d579:请问下,我要给指定日期添加图片,我找到- (UIImage *)calendar:(FSCalendar *)calendar imageForDate:(NSDate *)date这个方法,使用后没有显示图片,也写了_calendar.dataSource = self;,求解决
      • 微步毂纹生:怎么判断滑动到的年份月份啊,有没有这类的代理,我需要把滑动到的年月数据传到一些地方
        微步毂纹生:@shekwell123 谢谢,是这个方法:smile:
        c7757855d579:试一试这个方法 - (void)calendarCurrentPageDidChange:(FSCalendar *)calendar
      • 嗯o哼:你好,我在使用你的日历的时候,向上滑动的时候,日历并不会缩小只显示选中的那一行,我看了 你写的代码,但是,能力有限并没有找到 是哪里的问题。
        嗯o哼:就是显示 月 切换到 显示 周的时候,向上慢慢滑动,滑动一定程度,正常情况应该 切换到周了,但是 它会自动回滚下来。会出现这种情况。请问 是哪里的问题
      • 璞大大:你好 请问下 默认的不是东八区的时间 怎么默认成东八区么
      • 1d3c627748a1:功能丰富,非常强大,学习一下
      • __阳阳:膜拜大神, 问个问题, 我想获取从当天起接下来100天的日期, 然后用tableView显示, 要显示年份月份和周几, 可不可以用你的框架实现?
      • JosephWong2:作者你真的好强而且很谦虚, 很喜欢你!继续加油!BLESS U
      • nadou23:请问如果想根据后台数据某月有数据对应显示圆形框 当进行翻页(也就是到下个月 )也进行查询刷新日历 显示圆形框 但现在发现从
        - (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;

        发现数组可能没有被及时清空 这有办法解决吗?
      • 岑君行:你好 请问 不用sb 用纯代码创建viewController 在点击日期时会崩到calendar didSelectDate方法里 打印: did select date (null)
        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: 这是什么原因呢?请问
      • Ke_Wang:你好 请问下我想把上面标题部分 左右两侧的上一页 下一页往里面放一下 改使用哪个属性
      • a7c6cec64788:请教一下 如何将fillDefaultColor的范围扩大
      • 0dabc032f233:请问一下 您是怎么把小猫的图片 放到button里面的 demo里面没有 谢谢
      • 博士猫_BSM:你好,作者,我在当前的日期下面加了今日两个字,但是字体太大了,能单独修改今天日期的字体大小吗?我是这样修改的:- (NSString *)calendar:(FSCalendar *)calendar titleForDate:(NSDate *)date
        {
        if ([self.self.gregorianCalendar isDateInToday:date]) {
        return @"今日";
        }
        return nil;
        }
        loghm:我也想修改今天这个日期的字体大小,请问如何修改?
      • a7c6cec64788:求助 在日历的点击时间里面 如何获取到 cell里面的内容
      • 清眸如画:你好,我见在全局设置appearance中有这个属性weekdayTextColor,它把所有的颜色都设置了,请问如果我想单独设置周六日文字的颜色改怎么做?
      • 37c7796cd658:您好我有个问题,,事件的 小圆点,怎么设置 不同的颜色,比如 6月4号 圆点 显示红色,6月9号 圆点显示为 蓝色
      • SunnyCoffee:👍可定制程度很高,满足花样需求。
      • pangpoe:请问怎么在delegateapperance中实现长按滑动,开始和结束日期中的日期都改背景,谢谢。
      • 482d026cadbf:感谢作者开源;666666
      • 技術研發John:大神你好:
        想請問要做成像github上iphone截圖的第五張那樣的整頁日曆該怎麼實作啊?demo好像沒看到這樣頁面的實作
      • 94f9118b0c81:楼大,您好! 请问怎么让FSCalendarScope为FSCalendarScopeWeek的情况下,滑动周的时候,在没有跨过一个月的情况下,head的日期显示不要跟着联动呢?
      • 一场大雨:你好,直接pod下来的版本还是2.2.0,现在最新的是2.7.6了,还没更新呢,只能下载下来导进去么
      • 半岛小铁盒:请问下 周一到周日 字体的颜色 可以是不同的吗 怎么定制 周末 和 工作日的不同
      • da0f85ea5ac3:作者你好。RangePicker下怎么根据星期几剔除选中的日期?
      • 信Xin_GG:FSCalendar 模式下怎么可以让周末不能选择呀,没找到。。。求作者回复,谢谢~!
      • 闭眼_聆听世界:FSCalendarStickyHeader 的 bottomView 那条线,怎么弄掉.
      • 5e28dc61252a:请问下周和月怎么切换,我怎么在周切换月的时候,直接崩溃了,查询出问题的地方是targetBounds和sourceBounds的高度相等导致的。例如最初是月的时候,高度是200,当月切换到周的时候高度应该是74,但是界面调整了,实际FScalendar的高度还是200,最后就出问题了
      • 丶爱少年时代:请问如果想要自适应行高应该怎么修改呢,就是无论显示六行还是七行日期,日历高度都是固定的
      • f1535a71d2d8:怎么做 选择两个日期 让日期中间的全部选中 且变色?
      • 74810cc09eec:作者您好,请问怎么把某一个单独的日期设为不可点,您有做封装吗
      • 我是姑姑思密达:请问怎么将 上边表示周几的文字用汉字表示而不是英文 想要一 二 三 那种形式
      • xxxixxxx:你好,我想在请求到数据后将部分日期设为选中状态,日期背景色可以改变,但是文字的颜色无法改变。

        // 我是使用此方法 将请求到的日期改变背景色
        - (UIColor *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance fillDefaultColorForDate:(NSDate *)date;

        //但是没找到改变日期文字颜色的方法
        xxxixxxx:已解决!

        将源码中
        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];
      • 小鱼儿喜欢花无缺:FSCalendar获取的点击日期为啥总是比当前时间晚一天啊
      • f1535a71d2d8:选择时间段 怎么搞
      • 49b46081c97a:请问此日历如何滑动多选呢?如何禁止选择当前日期以前的时间呢?
      • 丿唯一的唯一丿:您好,,我想问一个问题,我不想要那个不是本月的日期,,怎么修改,
      • 牛蛋:大神你好!后台给了我日期@[@“2017-03-10”, @"2017-03-11", @"2017-03-13", @"2017-03-16"],这种类型数组 我怎么对应显示在日历上啊 期待您的回复!
      • ff25daa9f985:您好,如果要把头部的年月变化,更改为在下面月份左/右滑完之后变化可以吗?就是把头部的年月动画去掉。
      • 41bf55e4a050:FSCalendarCaseOptionsWeekdayUsesSingleUpperCase = 2 << 4, // S、M、T、W、T、F、S; 日、一、二、三、四、五、六

        这个我怎么改不成这种显示啊
        现在就要幸福_d9e4:您好,这个您解决了吗?怎么解决?
      • 蓝天大海:作者感觉你太厉害了。。佩服佩服,代码风格也很好,真棒👍
        WenchaoD:@广杭小子 多谢:smiley:
      • 桃子王:你好,除了单元格定制,有什么别的方法可以设置【今天】的边框颜色么?
        WenchaoD:@小桃儿1991 使用DelegateAppearance
        WenchaoD:@小桃儿1991 通过实现FSCalendarDelegateAppearance协议
      • 飞天蛤蟆:如果只是显示当月,不把其他月展示出来, 当滑动改变高度的时候,底部会出现问题
      • B_C_H:作者你好,我自定义了cell,因为项目需求是每个cell需要显示某个商品当天的价格,我怎么能对应赋值到cell上?希望交流,怎么及时联系作者?我QQ2696437433
      • 5fefe0f7cc8c:楼主 如何点击日期 切换一个背景图片
      • 5fefe0f7cc8c:哈哈 楼主这个签到日历 好弄么
      • 码渣:你好 请问可以在日期上加上自己的image么 然后日期不被遮挡
      • DZIR:您好。请问如果我想通过点击一个日期,然后把从今天开始到我点击的那一天之间的全部日期都选中该如何操作呢?看了介绍我想远离跟swipetochoose差不多,但是在demo里没有找到swipe的相关代码。
        DZIR:@_mry 自定义cell然后根据选中日期和开始日期对每个cell的date进行判断,如果在范围内则改变背景颜色否则颜色不变
        49c9990ff26c:解决了吗
      • 6581d01ccc8c:您好,请教一个问题,我在设置事件圆点的时候,不能显示本月日期设置的圆点,需要将日历滑动一页,再返回本月才能显示本月设置的事件圆点,是不是我使用的方法不对,请大神指导一下
      • ttys苹果核:我怎么修改底部线条显示与否呢
      • c06161d82502:在FSCalendarScopeExampleViewController中加入阴历,min/maximumDateForCalendar设置为默认值,subtitleForDate做相应处理:
        //@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时间显示错误问题。
      • _Andy_:请问 demo中 FSCalendar和tableView联动 用代码 怎么实现
        _Andy_:会了
      • 小虾57:单元格定制中,怎么让选中的日期,在第二次选中还是选中状态,我只是要选择这个日期,而不要改变它的选中状态。
      • 75a3eaba41b9:您好,我想请教下怎么清除多选数组selectedDates中的数据
        小虾57:@法想通沟事故流交 :+1:
        75a3eaba41b9:@虾米77 :joy:遍历selecteddates数组 对每个日期调 diselected方法
        小虾57:你找到方法了么?
      • f771d0a0ea3d:大神您好,用pod管理到项目中的代码 为什么不说最新的呢,更新也更不了,版本一直是1.7.2 和你demo中的代码又不一样的地方,有好多属性都没有,这是怎么回事?
      • Alex陌:你好 楼主 我翻到上一个月 怎么获取当前页面的年月呢
      • YanCey子非鱼:弱弱问一下楼主,如果我想做一个签到的日历,以前签到的记录,我用选中状态来代替的话。我要设置哪个方法?
      • 834f65bae4f0:App的签到功能需要用到您的FSCalendar,需要给已签到的日期添加一张表情图片,请问要调什么方法呢?可能后台给的有超过一个月,会不会翻页的时候重新遍历?
      • 834f65bae4f0:整个FSCalendar可以设置背景图片吗?
        834f65bae4f0:@WenchaoD 成功了,谢谢 :kissing_heart:
        WenchaoD:@suming1910 你好,将日历放在一个imageView对象上即可
      • LittleYuz:非常好的框架,github 已 star 。请问事件是否只支持圆点显示 ,需要自己定制cell
      • b523aa780226:牛逼啊 学习学习
      • 5a38f7481378:写的很棒, 准备投入我项目.
      • 钫泣哎:在我们的项目中折叠和展开有两种不同最大和最小的日期范围,在我控制[self.calendarView setScope:FSCalendarScopeMonth animated:YES]; 后刷新会崩溃。原因index 2 beyond bounds [0 .. 1]'。请问有什么好的办法可以设置两种最大最小范围吗
      • 钫泣哎:你好,看了你的代码真是太高端,太厉害了,我想请问一下可不可以设置一下日期可以滑动的范围 :pray:
        钫泣哎:找到了,还是要谢谢作者这么棒的作品
      • df45bc274a12:作者您好,我更改了日曆的類型如下
        let rocCalendar = NSCalendar.init(identifier: NSCalendar.Identifier.republicOfChina)
        formatter.calendar = rocCalendar as Calendar!

        這樣點選日曆後確實可以改成為其他國家的日曆,但headerView上的年月還是顯示2016.11
        請問要如還才能讓headerView,變成我所設定的國家日曆 如:105.11
      • df45bc274a12:作者您好,請問如何放置自定义header呢,我想更改header裡面的文字

      • Friday_lq:您好,我有个小疑惑 没找到答案,希望您能看看,就是我想可以点击但不显示背景颜色 calendar.appearance.eventDefaultColor = [UIColor clearColor]; 设置这个好像没有用 :blush:
        WenchaoD:这个只是取消了选中状态的形状颜色,字体选中时还是白色,因此看起来像是消失。选中色字体使用calendar.appearance.titleSelectionColor定制
        Friday_lq:@Friday_lq 发错 是设置了这个calendar.appearance.selectionColor = [UIColor clearColor];
        Friday_lq:@Friday_lq 设置透明 点击的时候背景色没有 但是对应的日期也看不见了 成了空白
      • 9bfe700d122a:很好,代码风格也 很不错,大力支持,github 已加星!!!
        WenchaoD:@不吐葡萄皮z 哈哈感谢:smile:
      • 酷酷的开发匠:我想问下 设置日期总是和系统时间差8小时 怎么改?
        酷酷的开发匠:@WenchaoD 我的问题是 使用您的日历 最小日期设置为现在时间,然后有时差问题 不是零点变为第二天 是第二天的八点才会变为第二天.
        WenchaoD:@ba60cba1c4d9 你好,直接打印Date对象会有格式问题。用NSDateFormatter转换一下会得到正确的输出
      • 共享日历:这代码非常工整,但是不知道如何利用代码来进行自定义日历 的显示

        比如,我要做一个类似于iOS 原生日历的那种 上下滑动 也类似于曾经的sunrise日历

        就是月视图连着一起,中间没有月份啥的
        星期几也是不用显示的,我看demo中有一个FSCalendarPlaceholderType,不知道现在为啥没有了,

        我以前也参与过 iOS版本的万年历开发,哈哈,当时那些代码写得很不好,但是毕竟是早期,技术不到位,现在想自己开发一款基于时间的app,希望可以和作者多沟通。
        WenchaoD:@竹园小伙 placeholder还在的,可以到项目主页下载:https://github.com/WenchaoD/FSCalendar。
        非常感谢@竹园小伙的肯定哈。
      • 胖子程:真的,没有比作者更棒的日历了!!!必须赞!
      • hazydream:请问 Header的位置如何设置,比如将Header放到左边而非中间
        WenchaoD:你好,可以隐藏header,然后放置自定义header即可。
      • P0is0n:感谢开源,请问大神能不能设定某些日子为不可选的呢?
        WenchaoD:@P0is0n 你好,请参考这个issue。https://github.com/WenchaoD/FSCalendar/issues/302
      • 酷哥不回头看爆炸:图文并茂,讲解很详细。对FSCalendar 理解更进一步
        WenchaoD:@无言是非丶 感谢:smile:
      • Louis_hey:怎么获取点击的日期
        WenchaoD:你好,在代理方法中-calendar:didSelectDate:

      本文标题:FSCalendar使用介绍(三) - 订制外观

      本文链接:https://www.haomeiwen.com/subject/cpnzdttx.html