我在setContentOffset
上使用UITableView
因为我想隐藏一个属于tableHeaderView
的搜索字段。
[self.tableView setContentOffset:CGPointMake(0, 56)]; // No scroll please!
每次我推新的viewController
我想用contentOffset隐藏搜索栏。但是当我弹出一个viewController
时,由于某些原因,该偏移不再有效并显示搜索栏。这是为什么?
答案 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)
如果你试图在失去它的动作中保留某些东西的价值,那么自然的解决办法就是自己抓住它(“保持/恢复”):
(对不起,我不编写Objective C代码,因此无法提供确切的代码。欢迎使用编辑来添加代码。)
在不同的情况下,可能需要保持您所在的行,然后滚动回该行:
(改编自:https://stackoverflow.com/a/34270078/199364)
(SWIFT)
1.保持当前行。
let holdIndexPath = tableView.indexPathForSelectedRow()
..做任何事情(也许以“reloadData”结尾)。
- 醇>
恢复保留行:
// The next line is to make sure the row object exists.
tableView.reloadRowsAtIndexPaths([holdIndexPath], withRowAnimation: .None)
tableView.scrollToRowAtIndexPath(holdIndexPath, atScrollPosition: atScrollPosition, animated: true)