【问题标题】:UITableView setContentOffset but don't scroll tableView?UITableView setContentOffset 但不滚动 tableView?
【发布时间】:2012-12-09 18:45:02
【问题描述】:

我在UITableView 上使用setContentOffset,因为我想最初隐藏一个搜索字段,即我的tableHeaderView

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

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

【问题讨论】:

  • 问题没看懂,setContentOffset的目的就是设置滚动位置。
  • 我的意思是,每次我推送一个新的viewController 时,我都想用 contentOffset 隐藏搜索栏。但是当我弹出viewController 时,由于某种原因,该偏移量不再有效。这是为什么呢?
  • 我认为@nizx 的答案会起作用。每次显示视图时重置 contentOffset。

标签: objective-c ios cocoa-touch uitableview


【解决方案1】:

你可以尝试在下面实现它

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

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

【讨论】:

  • 这会起作用,但是,比如说在 VC1 中他们滚动到底部,然后通过触摸一个单元格来推动一个新的 VC。然后当它们弹回来时,如果我调用setContentOffset,它会将 tableView 滚动到顶部,即使它确实应该在用户拥有它的地方保持滚动。
【解决方案2】:

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

scrollViewWillEndDragging:withVelocity:targetContentOffset:

它允许您修改最终目标以更改 contentOffset。在你的实现中:

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

【讨论】:

    【解决方案3】:

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

    1. “Hold”:获取字段或局部变量的内容偏移量。 Apple doc
    2. ..随心所欲。
    3. “恢复”:将内容偏移设置为您上面得到的值。

    (抱歉,我不会编写 Objective C 代码,因此无法提供确切的代码。欢迎编辑添加代码。)


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

    (斯威夫特)
    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-14
      • 1970-01-01
      相关资源
      最近更新 更多