首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使UIScrollView内容垂直而不是水平滚动?

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

Stack Overflow用户
提问于 2015-06-22 21:16:28
回答 1查看 182关注 0票数 1

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

JTcalendar的作者建议使用,但还不清楚应该如何为此目的修改contentOffset。下面是包含contentOffset的函数

JTCalendar.m宪兵.m:

代码语言:javascript
复制
- (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);
    }
}

JTCalendarContentView.m:

代码语言:javascript
复制
- (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);
}
EN

回答 1

Stack Overflow用户

发布于 2015-06-22 22:14:43

在scrollViewDidScroll中:

这一行:

代码语言:javascript
复制
CGPointMake(sender.contentOffset.x * calendarAppearance.ratioContentMenu, self.contentView.contentOffset.y);

应该是这样的:

代码语言:javascript
复制
CGPointMake(sender.contentOffset.x, self.contentView.contentOffset.y * calendarAppearance.ratioContentMenu);

这一行:

代码语言:javascript
复制
self.menuMonthsView.contentOffset = CGPointMake(sender.contentOffset.x / calendarAppearance.ratioContentMenu, self.menuMonthsView.contentOffset.y);

应该是这样的:

代码语言:javascript
复制
self.menuMonthsView.contentOffset = CGPointMake(sender.contentOffset.x, self.menuMonthsView.contentOffset.y / calendarAppearance.ratioContentMenu);

在configureConstraintsForSubviews中,有一些地方可能需要修改。不确定下面的行,因为它被设置为修复特定的错误,所以您现在可以注释掉它,看看会发生什么:

代码语言:javascript
复制
// Probably comment this out    
self.contentOffset = CGPointMake(self.contentOffset.x, 0); // Prevent bug when contentOffset.y is negative

这段代码:

代码语言:javascript
复制
for(UIView *view in monthsViews){
        view.frame = CGRectMake(x, 0, width, height);
        x = CGRectGetMaxX(view.frame);
    }

应该是这样的:(将x变量重命名为y)

代码语言:javascript
复制
for(UIView *view in monthsViews){
    view.frame = CGRectMake(0, y, width, height);
    y = CGRectGetMaxY(view.frame);
}

最后,这一行:

代码语言:javascript
复制
self.contentSize = CGSizeMake(width * NUMBER_PAGES_LOADED, height);

可能应该是:

代码语言:javascript
复制
self.contentSize = CGSizeMake(width, height * NUMBER_PAGES_LOADED);

我没有测试其中的任何一个,但是基于您发布的代码以及我在过去使用过JTCal的事实,这将使您走上正确的道路。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30989973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档