2

setContentOffset在 a 上使用是UITableView因为我想最初隐藏我的搜索字段tableHeaderView

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

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

4

3 回答 3

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;
    }
}
于 2012-12-09T18:59:22.633 回答
0

您可以尝试在以下位置实现它

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

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

于 2012-12-09T18:50:04.987 回答
0

如果您试图在丢失某物的操作期间保留它的价值,自然的解决方案是自己保留它(“保留/恢复”):

  1. “保持”:获取字段或局部变量的内容偏移量。苹果文档
  2. .. 做你想做的。
  3. “恢复”:将内容偏移设置为您上面得到的值。

(对不起,我不编写 Objective C 代码,所以无法提供确切的代码。欢迎编辑添加代码。)


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

(Swift)
1. 保持当前行。

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

  2. 恢复保持行:

// The next line is to make sure the row object exists.
tableView.reloadRowsAtIndexPaths([holdIndexPath], withRowAnimation: .None)
tableView.scrollToRowAtIndexPath(holdIndexPath, atScrollPosition: atScrollPosition, animated: true)
于 2017-04-11T23:38:02.993 回答