我有UIScrollView
,其中包含calendarView。我现在想要的是滚动视图中已经加载了下个月和前两个月。
我有以下两种方法。
-(void)addCalendarToEnd{
iPhoneMonthView *phoneCal = [[iPhoneMonthView alloc] init];
phoneCal.delegate = self;
phoneCal.dataSource = self;
[phoneCal selectDate:[self sameDateByAddingMonths:1 andDate:scrollDate]];
float xValue = phoneCal.frame.size.width * numberOfCalendarsAfterToday;
phoneCal.frame = CGRectMake(xValue, 0, phoneCal.frame.size.width, phoneCal.frame.size.height);
[self.calendarScroll addSubview:phoneCal];
int numberScroll = numberOfCalendarsBeforeToday + numberOfCalendarsAfterToday + 1;
calendarScroll.contentSize = CGSizeMake(numberScroll*phoneCal.bounds.size.width,calendarScroll.bounds.size.height);
[calendarScroll addSubview:phoneCal];
NSLog(@"CONTENT SIZE IS %f",calendarScroll.contentSize.width);
numberOfCalendarsAfterToday++;
}
-(void)addCalenderToBeginning{
iPhoneMonthView *phoneCal = [[iPhoneMonthView alloc] init];
phoneCal.delegate = self;
phoneCal.dataSource = self;
[phoneCal selectDate:[self sameDateByAddingMonths:-1 andDate:scrollDate]];
float xValue = phoneCal.frame.size.width * numberOfCalendarsBeforeToday;
NSLog(@"XVALUE IS %f",xValue);
phoneCal.frame = CGRectMake(-xValue, 0, phoneCal.frame.size.width, phoneCal.frame.size.height);
[self.calendarScroll addSubview:phoneCal];
int numberScroll = numberOfCalendarsBeforeToday + numberOfCalendarsAfterToday + 1;
calendarScroll.contentSize = CGSizeMake(numberScroll*phoneCal.bounds.size.width,calendarScroll.bounds.size.height);
NSLog(@"CONTENT SIZE IS %f",calendarScroll.contentSize.width);
numberOfCalendarsBeforeToday++;
}
addCalendarToEnd
正常运作。但addCalendarToBeginning
不是。{1}}。
它在正确的位置添加视图。但我不知道如何设置contentSize
的{{1}}。
有人能帮助我吗?
修改
这就是我在ViewDidLoad中所做的事情
UIScrollView
答案 0 :(得分:1)
如果您只想滚动浏览5个月,那么我建议您以线性方式填充内容,然后适当地移动内容偏移量。
因此,循环浏览视图,将它们添加到滚动视图并调整框架的原点,使它们彼此齐平。
然后调整contentOffset
scrollview.contentOffset.x = 3*phoneCal.frame.size.width;
但是,如果你想滚动查看"无限"您应该查看DMCircularScrollView
等解决方案的金额答案 1 :(得分:1)
看起来你正在努力使它变得更加困难。如果我理解你的问题,你应该能够通过这样的方式来解决你的问题:
-(void)viewDidLoad
{
[super viewDidLoad];
int numberOfMonthViews = 5;
float monthViewWidth = 320.0f;
float monthViewHeight = 200.0f;
self.calendarScroll = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, monthViewWidth, monthViewHeight)];
self.calendarScroll.delegate = self;
self.calendarScroll.backgroundColor = [UIColor clearColor];
NSDate* todayDate = [NSDate new];
int dateOffset = -2;
for (int i = 0; i < numberOfMonthViews; i++)
{
iPhoneMonthView *phoneCal = [[iPhoneMonthView alloc] init];
phoneCal.delegate = self;
phoneCal.dataSource = self;
[phoneCal selectDate:[self sameDateByAddingMonths:dateOffset andDate:todayDate]];
float xValue = monthViewWidth * i;
phoneCal.frame = CGRectMake(xValue, 0, monthViewWidth, monthViewHeight);
[self.calendarScroll addSubview:phoneCal];
calendarScroll.contentSize = CGSizeMake(xValue + monthViewWidth, monthViewHeight);
dateOffset++;
}
self.calendarScroll.contentOffset = CGPoint(monthViewWidth*2, 0.0f);
}
如果您对我的解决方案有任何疑问,请发表评论。
答案 2 :(得分:0)
For Begin尝试设置滚动视图内容偏移量:
calendarScroll.contentOffset = CGPointZero;
答案 3 :(得分:0)
我不建议你按照这样做的方式做到这一点 - 事实上,我似乎无法控制数量或重用,你将创造无限的日历(字面意思)。我建议利用现有的解决方案:
https://github.com/evadne/DayFlow(无限日历)
https://github.com/caesarcat/InfinitePagingView(无限UIScrollView)
其次,为起始日历的帧设置负值将不起作用,它只会导致它在可见边界之外。你必须给它{0, 0}
的原点并分流所有以下日历以容纳它。
答案 4 :(得分:0)
在addCalendarToEnd
方法中,您首先将 phoneCal 添加为 calendarScroll 的子视图,并self.calendarScroll
,最后添加calendarScroll
在addCalenderToBeginning
方法中,您应该将contentSize
设置为..
calendarScroll.contentSize = CGSizeMake(-(numberScroll*phoneCal.bounds.size.width),calendarScroll.bounds.size.height);
已编辑:
只需尝试使用viewDidLoad
方法
int numberScroll = numberOfCalendarsBeforeToday + numberOfCalendarsAfterToday + 1;
calendarScroll.contentSize = CGSizeMake(numberScroll*phoneCal.bounds.size.width,calendarScroll.bounds.size.height);
并在方法numberOfCalendarsBeforeToday++;
的开头设置addCalenderToBeginning
。
如果您不理解任何事情,请尝试使用我的上述代码,然后将其作为评论。
答案 5 :(得分:0)
您必须使用contentInset
参数来定义用户的滚动限制。
我想你只想让它们在顶部日历中达到峰值,除非它们拖得足够,此时你将contentInset.top
设置为负数,以及#34;解锁&#34;一个新的滚动区域,让它们向上滚动。