123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- //
- // FSCalendarStaticHeader.m
- // FSCalendar
- //
- // Created by dingwenchao on 9/17/15.
- // Copyright (c) 2015 Wenchao Ding. All rights reserved.
- //
- #import "FSCalendarStickyHeader.h"
- #import "FSCalendar.h"
- #import "FSCalendarWeekdayView.h"
- #import "FSCalendarExtensions.h"
- #import "FSCalendarConstants.h"
- #import "FSCalendarDynamicHeader.h"
- @interface FSCalendarStickyHeader ()
- @property (weak , nonatomic) UIView *contentView;
- @property (weak , nonatomic) UIView *bottomBorder;
- @property (weak , nonatomic) FSCalendarWeekdayView *weekdayView;
- @end
- @implementation FSCalendarStickyHeader
- - (instancetype)initWithFrame:(CGRect)frame
- {
- self = [super initWithFrame:frame];
- if (self) {
-
- UIView *view;
- UILabel *label;
-
- view = [[UIView alloc] initWithFrame:CGRectZero];
- view.backgroundColor = [UIColor clearColor];
- [self addSubview:view];
- self.contentView = view;
-
- label = [[UILabel alloc] initWithFrame:CGRectZero];
- label.textAlignment = NSTextAlignmentCenter;
- label.numberOfLines = 0;
- [_contentView addSubview:label];
- self.titleLabel = label;
-
- view = [[UIView alloc] initWithFrame:CGRectZero];
- view.backgroundColor = FSCalendarStandardLineColor;
- [_contentView addSubview:view];
- self.bottomBorder = view;
-
- FSCalendarWeekdayView *weekdayView = [[FSCalendarWeekdayView alloc] init];
- [self.contentView addSubview:weekdayView];
- self.weekdayView = weekdayView;
- }
- return self;
- }
- - (void)layoutSubviews
- {
- [super layoutSubviews];
-
- _contentView.frame = self.bounds;
-
- CGFloat weekdayHeight = _calendar.preferredWeekdayHeight;
- CGFloat weekdayMargin = weekdayHeight * 0.1;
- CGFloat titleWidth = _contentView.fs_width;
-
- self.weekdayView.frame = CGRectMake(0, _contentView.fs_height-weekdayHeight-weekdayMargin, self.contentView.fs_width, weekdayHeight);
-
- CGFloat titleHeight = [@"1" sizeWithAttributes:@{NSFontAttributeName:self.calendar.appearance.headerTitleFont}].height*1.5 + weekdayMargin*3;
-
- _bottomBorder.frame = CGRectMake(0, _contentView.fs_height-weekdayHeight-weekdayMargin*2, _contentView.fs_width, 1.0);
- CGPoint titleHeaderOffset = self.calendar.appearance.headerTitleOffset;
- _titleLabel.frame = CGRectMake(titleHeaderOffset.x,
- titleHeaderOffset.y+_bottomBorder.fs_bottom-titleHeight-weekdayMargin,
- titleWidth,
- titleHeight);
- }
- #pragma mark - Properties
- - (void)setCalendar:(FSCalendar *)calendar
- {
- if (![_calendar isEqual:calendar]) {
- _calendar = calendar;
- _weekdayView.calendar = calendar;
- [self configureAppearance];
- }
- }
- #pragma mark - Private methods
- - (void)configureAppearance
- {
- _titleLabel.font = self.calendar.appearance.headerTitleFont;
- _titleLabel.textColor = self.calendar.appearance.headerTitleColor;
- _titleLabel.textAlignment = self.calendar.appearance.headerTitleAlignment;
- _bottomBorder.backgroundColor = self.calendar.appearance.headerSeparatorColor;
- [self.weekdayView configureAppearance];
- }
- - (void)setMonth:(NSDate *)month
- {
- _month = month;
- _calendar.formatter.dateFormat = self.calendar.appearance.headerDateFormat;
- BOOL usesUpperCase = (self.calendar.appearance.caseOptions & 15) == FSCalendarCaseOptionsHeaderUsesUpperCase;
- BOOL usesCapitalized = (self.calendar.appearance.caseOptions & 15) == FSCalendarCaseOptionsHeaderUsesCapitalized;
- NSString *text = [_calendar.formatter stringFromDate:_month];
- if (usesUpperCase) {
- text = text.uppercaseString;
- } else if (usesCapitalized) {
- text = text.capitalizedString;
- }
- self.titleLabel.text = text;
- }
- @end
|