【问题标题】:Scroll in first table cell to center在第一个表格单元格中滚动到中心
【发布时间】:2015-01-10 23:49:34
【问题描述】:

我有一个带有自定义单元格的 UITableView。单元格的高度恒定为 200。我想为第一个单元格的滚动设置动画。这使用scrollToRowAtIndexPath 有效。但是,该行出现在视图的顶部,而我希望它在可见的 tableView 中出现死点。我尝试将 tableView 的 contentInset 属性设置为一堆不同的值,但似乎没有一个提供正确的偏移量。有什么建议吗?

【问题讨论】:

  • 您的 contentInset 将是 tableview 的高度除以 2 减去我认为的 tableViewCell 高度的一半。你试过吗?
  • @Emil,我不确定你的意思。 contentInset 是 UIEdgeInsets 类型,因此它需要一个顶部、底部、左侧和右侧的值。感谢您的帮助。
  • 是的,所以顶部插图将是 tableView-height 的一半减去单元格高度的一半。

标签: ios objective-c uitableview swift


【解决方案1】:

UITableView 实际上有一个巧妙的方法:

- (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath
              atScrollPosition:(UITableViewScrollPosition)scrollPosition
                      animated:(BOOL)animated

您可以使用它将 tableView 滚动到单元格位于 tableView 中心的点,如下所示:

[tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionMiddle animated:TRUE];

【讨论】:

  • 这不起作用。滚动到第 0 行的索引将该单元格置于顶部,即使我指定了 ScrollPositionMiddle。
  • 这是预期的行为,因为它上面没有单元格,滚动视图从第一个单元格开始,并且不能进一步向上滚动。要达到您想要的效果,您必须使用插图,请参阅我对问题的评论。
【解决方案2】:

我能找到的唯一方法是使用scrollRectToVisible 而不是scrollToRowAtIndexPath。无论出于何种原因(可能是因为我的桌子上的滚动被禁用),即使使用@Emil 将scrollToRowAtIndexPathcontentInset 组合的建议,定位仍然关闭。

这行得通:

tableView.contentInset = UIEdgeInsets(top: cellHeight, left: 0, bottom: cellHeight, right: 0)
tableView.scrollRectToVisible(CGRectMake(0, 0 - tableView.contentSize.height, cellWidth, tableView.contentSize.height), animated: false)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多