UITableView setContentOffset但是不滚动tableView?

时间:2012-12-09 18:45:02

标签: objective-c ios cocoa-touch uitableview

我在setContentOffset上使用UITableView因为我想隐藏一个属于tableHeaderView的搜索字段。

[self.tableView setContentOffset:CGPointMake(0, 56)]; // No scroll please!

每次我推新的viewController我想用contentOffset隐藏搜索栏。但是当我弹出一个viewController时,由于某些原因,该偏移不再有效并显示搜索栏。这是为什么?

3 个答案:

答案 0 :(得分:0)

您可以尝试在以下

上实施它
- (void)viewWillAppear:(BOOL)animated {
    [self.tableView setContentOffset:CGPointMake(0, 56)];
}

将表格放在屏幕上显示之前的正确位置,我假设您在设置位置时没有动画。

答案 1 :(得分:0)

我猜你想阻止用户滚动到屏幕的最顶层。如果是这样,您可以实现以下UITableView委托(在iOS5及更高版本上):

scrollViewWillEndDragging:withVelocity:targetContentOffset:

允许您修改contentOffset中更改的最终目标。在您执行的实现中:

- (void)scrollViewWillEndDragging:(UIScrollView *)theScrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
{
    if(targetContentOffset->y < 56) {
         targetContentOffset->y=56;
    }
}

答案 2 :(得分:0)

如果你试图在失去它的动作中保留某些东西的价值,那么自然的解决办法就是自己抓住它(“保持/恢复”):

  1. “保持”:获取字段或局部变量的内容偏移量。 Apple doc
  2. ..做你想做的事。
  3. “恢复”:将内容偏移设置为您上面的值。
  4. (对不起,我不编写Objective C代码,因此无法提供确切的代码。欢迎使用编辑来添加代码。)

    在不同的情况下,可能需要保持您所在的行,然后滚动回该行:
    (改编自:https://stackoverflow.com/a/34270078/199364

      

    (SWIFT)
      1.保持当前行。

    let holdIndexPath = tableView.indexPathForSelectedRow()
    
      
        
    1. ..做任何事情(也许以“reloadData”结尾)。

    2.   
    3. 恢复保留行:

    4.   
    // The next line is to make sure the row object exists.
    tableView.reloadRowsAtIndexPaths([holdIndexPath], withRowAnimation: .None)
    tableView.scrollToRowAtIndexPath(holdIndexPath, atScrollPosition: atScrollPosition, animated: true)