Ios 如何使UIScrollView的内容垂直滚动而不是水平滚动?

Ios 如何使UIScrollView的内容垂直滚动而不是水平滚动?,ios,uiscrollview,Ios,Uiscrollview,我正在使用它构建一个自定义日历应用程序,默认情况下,它设置为水平滚动月份。根据我的理解,将其设置为垂直滚动将需要以垂直方式排列内容(月份) JTcalendar的作者提出了建议,但尚不清楚如何准确地修改contentOffset。以下是包含contentOffset的函数: JTCalendar.m: - (void)scrollViewDidScroll:(UIScrollView *)sender { if(self.calendarAppearance.isWeekMode){

我正在使用它构建一个自定义日历应用程序,默认情况下,它设置为水平滚动月份。根据我的理解,将其设置为垂直滚动将需要以垂直方式排列内容(月份)

JTcalendar的作者提出了建议,但尚不清楚如何准确地修改
contentOffset
。以下是包含
contentOffset
的函数:

JTCalendar.m:

- (void)scrollViewDidScroll:(UIScrollView *)sender
{
    if(self.calendarAppearance.isWeekMode){
        return;
    }

    if(sender == self.menuMonthsView && self.menuMonthsView.scrollEnabled){
        self.contentView.contentOffset = CGPointMake(sender.contentOffset.x * calendarAppearance.ratioContentMenu, self.contentView.contentOffset.y);

    }
    else if(sender == self.contentView && self.contentView.scrollEnabled){
        self.menuMonthsView.contentOffset = CGPointMake(sender.contentOffset.x / calendarAppearance.ratioContentMenu, self.menuMonthsView.contentOffset.y);
    }
}
- (void)configureConstraintsForSubviews
{
    self.contentOffset = CGPointMake(self.contentOffset.x, 0); // Prevent bug when contentOffset.y is negative

    CGFloat x = 0;
    CGFloat width = self.frame.size.width;
    CGFloat height = self.frame.size.height;

    for(UIView *view in monthsViews){
        view.frame = CGRectMake(x, 0, width, height);
        x = CGRectGetMaxX(view.frame);
    }

    self.contentSize = CGSizeMake(width * NUMBER_PAGES_LOADED, height);
}
JTCalendarContentView.m:

- (void)scrollViewDidScroll:(UIScrollView *)sender
{
    if(self.calendarAppearance.isWeekMode){
        return;
    }

    if(sender == self.menuMonthsView && self.menuMonthsView.scrollEnabled){
        self.contentView.contentOffset = CGPointMake(sender.contentOffset.x * calendarAppearance.ratioContentMenu, self.contentView.contentOffset.y);

    }
    else if(sender == self.contentView && self.contentView.scrollEnabled){
        self.menuMonthsView.contentOffset = CGPointMake(sender.contentOffset.x / calendarAppearance.ratioContentMenu, self.menuMonthsView.contentOffset.y);
    }
}
- (void)configureConstraintsForSubviews
{
    self.contentOffset = CGPointMake(self.contentOffset.x, 0); // Prevent bug when contentOffset.y is negative

    CGFloat x = 0;
    CGFloat width = self.frame.size.width;
    CGFloat height = self.frame.size.height;

    for(UIView *view in monthsViews){
        view.frame = CGRectMake(x, 0, width, height);
        x = CGRectGetMaxX(view.frame);
    }

    self.contentSize = CGSizeMake(width * NUMBER_PAGES_LOADED, height);
}

在scrollViewDidScroll中:

这一行:

CGPointMake(sender.contentOffset.x * calendarAppearance.ratioContentMenu, self.contentView.contentOffset.y);
应该是这样的:

CGPointMake(sender.contentOffset.x, self.contentView.contentOffset.y * calendarAppearance.ratioContentMenu);
这一行:

self.menuMonthsView.contentOffset = CGPointMake(sender.contentOffset.x / calendarAppearance.ratioContentMenu, self.menuMonthsView.contentOffset.y);
self.contentSize = CGSizeMake(width * NUMBER_PAGES_LOADED, height);
应该是这样的:

self.menuMonthsView.contentOffset = CGPointMake(sender.contentOffset.x, self.menuMonthsView.contentOffset.y / calendarAppearance.ratioContentMenu);
在ConfigureConstraintsforSubview中,有几个地方可能需要修改。不确定以下行,因为它被设置为修复一个特定的bug,所以您可以暂时将其注释掉,看看会发生什么:

// Probably comment this out    
self.contentOffset = CGPointMake(self.contentOffset.x, 0); // Prevent bug when contentOffset.y is negative
这段代码:

for(UIView *view in monthsViews){
        view.frame = CGRectMake(x, 0, width, height);
        x = CGRectGetMaxX(view.frame);
    }
应该是这样的:(将x变量重命名为y)

最后,这一行:

self.menuMonthsView.contentOffset = CGPointMake(sender.contentOffset.x / calendarAppearance.ratioContentMenu, self.menuMonthsView.contentOffset.y);
self.contentSize = CGSizeMake(width * NUMBER_PAGES_LOADED, height);
应该是:

self.contentSize = CGSizeMake(width, height * NUMBER_PAGES_LOADED);

我没有测试过这些,但基于您发布的代码和我过去使用过JTCal的事实,这应该会让您走上正确的道路。

这允许垂直滚动,但当滚动停止时,日子就消失了。为什么会这样?