dav*_*son 147 iphone cocoa-touch uitableview ios
我有一个UITableView有两个部分.这是一个简单的表格视图.我正在使用viewForHeaderInSection为这些标头创建自定义视图.到现在为止还挺好.
默认滚动行为是当遇到一个部分时,部分标题保持锚定在导航栏下方,直到下一部分滚动到视图中.
我的问题是:我可以更改默认行为,以便节标题不会停留在顶部,而是在导航栏下滚动剩下的部分行吗?
我错过了一些明显的东西吗
谢谢.
小智 173
我解决了这个问题的方式是,调整contentOffset根据contentInset在UITableViewControllerDelegate(延伸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);
}
}
Run Code Online (Sandbox Code Playgroud)
这里唯一的问题是当滚动回到顶部时它会失去一点反弹.
{注意:"40"应该是你的0部分标题的确切高度.如果您使用的数字大于第0部分标题高度,您会看到手指感觉受到影响(尝试"1000",您会看到反弹行为在顶部有点奇怪).如果数字符合你的0部分标题高度,手指感觉似乎是完美的或接近完美的.}
voi*_*ern 86
您还可以在顶部添加一个零行的部分,只需使用上一部分的页脚作为下一部分的标题.
Col*_*ett 36
如果我这样做,我会利用以下事实:Plain样式中的UITableViews具有粘性标题,而Grouped样式中的UITableViews则没有.我可能至少尝试使用自定义表格单元来模拟Grouped表格中Plain单元格的外观.
我实际上没有尝试过,所以它可能无法正常工作,但这就是我建议做的事情.
Loc*_*ike 28
我知道它来得很晚,但我找到了最终的解决方案!
你想要做的是如果你有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;
}
}
Run Code Online (Sandbox Code Playgroud)
瞧!:d
Nei*_*all 15
以非hacky方式解决此问题需要做几件事:
UITableViewStyleGroupedbackgroundColor为[UIColor clearColor]backgroundView每个表视图单元格设置为空视图backgroundColor [UIColor clearColor]rowHeight,或者tableView:heightForRowAtIndexPath:在各个行具有不同高度时覆盖.Tho*_*sen 15
到目前为止,我对这里描述的解决方案不满意,所以我试着将它们结合起来.结果是以下代码,受@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)]];
Run Code Online (Sandbox Code Playgroud)
Art*_*r S 14
只需更改TableView样式:
self.tableview = [[UITableView alloc] initwithFrame:frame style:UITableViewStyleGrouped];
Run Code Online (Sandbox Code Playgroud)
UITableViewStylePlain-普通表视图.任何节页眉或页脚都显示为内联分隔符,并在滚动表视图时浮动.
UITableViewStyleGrouped-一个表视图,其截面显示不同的行组.节标题和页脚不会浮动.
使用透明视图设置表的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];
Run Code Online (Sandbox Code Playgroud)
更改TableView样式:
self.tableview = [[UITableView alloc] initwithFrame:frame style:UITableViewStyleGrouped];
Run Code Online (Sandbox Code Playgroud)
根据UITableView的苹果文档:
UITableViewStylePlain-普通表视图.任何节页眉或页脚都显示为内联分隔符,并在滚动表视图时浮动.
UITableViewStyleGrouped-一个表视图,其截面显示不同的行组.节标题和页脚不会浮动.希望这个小改变能帮到你..
| 归档时间: |
|
| 查看次数: |
87354 次 |
| 最近记录: |