我已经在我的tableView中实现了“拉动刷新”,如iPhone应用程序Twitter或Facebook 我的tableView包含带有头部视图的部分。当tableView处于“刷新模式”时,所以当我拉取tableView进行刷新时,我设置tableView的contentInset以某种方式显示tableView。此时,如果我将tableView向上推,则UITableView的标题不再滚动到UITableView的顶部。请参阅以下屏幕截图:
我如何解决这个问题,使标题按预期滚动?
谢谢!
答案 0 :(得分:26)
使用contentInset时遇到了同样的问题,并通过向scrollViewDidScroll添加代码来修复它:在“加载”状态下动态更新contentInset。
if( refreshState == kLoading ) {
if( scrollView.contentOffset.y >= 0 )
scrollView.contentInset = UIEdgeInsetsZero;
else
scrollView.contentInset = UIEdgeInsetsMake( MIN( -scrollView.contentOffset.y, kPullHeight ), 0, 0, 0 );
}
答案 1 :(得分:2)
执行此操作时,我通常在UITableView中使用表格范围的标题:
@property(nonatomic, retain) UIView *tableHeaderView
...而不是contentInsets。 contentInsets有很多错误,一直回到iOS 2.x天,我不确定它们是否已全部修复。你有没有理由不能使用表头?
答案 2 :(得分:1)
尝试这种方式添加推送视图控制器。
然后将表视图和刷新控制器分配给tableview控制器的属性。
UITableViewController *newTableViewController = [[UITableViewController alloc] init];
newTableViewControler.tableView = <yourTableView>;
<yourRefreshController> = [[UIRefreshControl alloc] init];
[<yourRefreshController> addTarget:self
action:@selector(refreshTableView:)
forControlEvents:UIControlEventValueChanged];
newTableViewController.refreshControl = _chatListRefreshControl;
[self addChildViewController:newTableViewController];
答案 3 :(得分:0)
看起来像一个UIKit错误。找到了解决方法:
// your initial inset
let kInset = 40.0
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let offset = scrollView.contentOffset.y
if (offset < 0) {
scrollView.contentInset = UIEdgeInsets(top: kInset, left: 0.0, bottom: 0.0, right: 0.0)
} else {
scrollView.contentInset = .zero
}
}