当前位置:  开发笔记 > 编程语言 > 正文

更改UITableView节标题的默认滚动行为

如何解决《更改UITableView节标题的默认滚动行为》经验,为你挑选了11个好方法。

我有一个UITableView有两个部分.这是一个简单的表格视图.我正在使用viewForHeaderInSection为这些标头创建自定义视图.到现在为止还挺好.

默认滚动行为是当遇到一个部分时,部分标题保持锚定在导航栏下方,直到下一部分滚动到视图中.

我的问题是:我可以更改默认行为,以便节标题不会停留在顶部,而是在导航栏下滚动剩下的部分行吗?

我错过了一些明显的东西吗

谢谢.



1> 小智..:

我解决了这个问题的方式是,调整contentOffset根据contentInsetUITableViewControllerDelegate(延伸UIScrollViewDelegate)所示:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
       CGFloat sectionHeaderHeight = 40;
   if (scrollView.contentOffset.y<=sectionHeaderHeight&&scrollView.contentOffset.y>=0) {
       scrollView.contentInset = UIEdgeInsetsMake(-scrollView.contentOffset.y, 0, 0, 0);
   } else if (scrollView.contentOffset.y>=sectionHeaderHeight) {
       scrollView.contentInset = UIEdgeInsetsMake(-sectionHeaderHeight, 0, 0, 0);
   }
}

这里唯一的问题是当滚动回到顶部时它会失去一点反弹.


{注意:"40"应该是你的0部分标题的确切高度.如果您使用的数字大于第0部分标题高度,您会看到手指感觉受到影响(尝试"1000",您会看到反弹行为在顶部有点奇怪).如果数字符合你的0部分标题高度,手指感觉似乎是完美的或接近完美的.}


此解决方案无法正确处理tap-on-menubar,它应该滚动到列表的顶部.
谢谢!这是一个完美的解决方案.你有截面页脚的解决方案吗?

2> voidStern..:

您还可以在顶部添加一个零行的部分,只需使用上一部分的页脚作为下一部分的标题.


在我的情况下,我有超过2个部分,页脚将锚定在底部..
这很有创意,但如果您使用NSFetchedResultsController加载表,则需要调整indexPath.

3> Colin Barret..:

如果我这样做,我会利用以下事实:Plain样式中的UITableViews具有粘性标题,而Grouped样式中的UITableViews则没有.我可能至少尝试使用自定义表格单元来模拟Grouped表格中Plain单元格的外观.

我实际上没有尝试过,所以它可能无法正常工作,但这就是我建议做的事情.


我尝试这样做,但是当我无法使分组表格单元看起来像普通单元格时,即删除单元格两侧的左右边距.你是怎么做的?

4> LocoMike..:

我知道它来得很晚,但我找到了最终的解决方案!

你想要做的是如果你有10个部分,让dataSource返回20.对部分标题使用偶数,对部分内容使用奇数.这样的事情

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if (section%2 == 0) {
        return 0;
    }else {
        return 5;
    }
}

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    if (section%2 == 0) {
        return [NSString stringWithFormat:@"%i", section+1];
    }else {
        return nil;
    }
}

瞧!:d



5> Neil Gall..:

以非hacky方式解决此问题需要做几件事:

    将表视图样式设置为 UITableViewStyleGrouped

    将表视图设置backgroundColor[UIColor clearColor]

    backgroundView每个表视图单元格设置为空视图backgroundColor [UIColor clearColor]

    如有必要,请相应地设置表视图rowHeight,或者tableView:heightForRowAtIndexPath:在各个行具有不同高度时覆盖.



6> Doc..:

最初发布在这里,使用IB的快速解决方案.虽然非常简单,但可以通过编程方式完成.

一种可能更容易实现的方法(使用IB):

将UIView拖到TableView上,使其成为标题视图.

    将标题视图高度设置为100px

    将tableview contentInset(顶部)设置为-100

    现在,节标题将像任何常规单元格一样滚动.

有人评论说这个解决方案隐藏了第一个标题,但是我没有注意到任何这样的问题.它对我来说非常合适,是迄今为止我见过的最简单的解决方案.


它确实隐藏了我的第一个标题

7> Thomas Kekei..:

到目前为止,我对这里描述的解决方案不满意,所以我试着将它们结合起来.结果是以下代码,受@awulf和@cescofry的启发.它适用于我,因为我没有真正的表视图标题.如果您已有表格视图标题,则可能需要调整高度.

// Set the edge inset
self.tableView.contentInset = UIEdgeInsetsMake(-23.0f, 0, 0, 0);

// Add a transparent UIView with the height of the section header (ARC enabled)
[self.tableView setTableHeaderView:[[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 100.0f, 23.0f)]];



8> Arthur S..:

只需更改TableView样式:

self.tableview = [[UITableView alloc] initwithFrame:frame style:UITableViewStyleGrouped];

UITableViewStyle文档:

UITableViewStylePlain-普通表视图.任何节页眉或页脚都显示为内联分隔符,并在滚动表视图时浮动.

UITableViewStyleGrouped-一个表视图,其截面显示不同的行组.节标题和页脚不会浮动.



9> 小智..:

选择Grouped TableView样式

从故事板中的tableView的Attribute Inspector中选择Grouped Table View样式.



10> cescofry..:

使用透明视图设置表的headerView,并在剖面视图中设置标题的高度。还要使用-height框架初始化tableview。

self.tableview = [[UITableView alloc] initWithFrame:CGRectMake(0, - height, 300, 400)];

UIView *headerView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, width, height)] autorelease];
[self.tableView setTableHeaderView:headerView];



11> Aks..:

更改TableView样式:

self.tableview = [[UITableView alloc] initwithFrame:frame style:UITableViewStyleGrouped];

根据UITableView的苹果文档:

UITableViewStylePlain-普通表视图.任何节页眉或页脚都显示为内联分隔符,并在滚动表视图时浮动.

UITableViewStyleGrouped-一个表视图,其截面显示不同的行组.节标题和页脚不会浮动.希望这个小改变能帮到你..

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有