更改tableview的插入时UITableView中的节标题

时间:2011-03-28 23:09:36

标签: iphone objective-c cocoa

我已经在我的tableView中实现了“拉动刷新”,如iPhone应用程序Twitter或Facebook 我的tableView包含带有头部视图的部分。当tableView处于“刷新模式”时,所以当我拉取tableView进行刷新时,我设置tableView的contentInset以某种方式显示tableView。此时,如果我将tableView向上推,则UITableView的标题不再滚动到UITableView的顶部。请参阅以下屏幕截图:

screenshot 1

screenshot 2

我如何解决这个问题,使标题按预期滚动?

谢谢!

4 个答案:

答案 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
    }
}