ScrollToRow - 如何让最后一行滚动到屏幕顶部?

时间:2020-12-28 23:16:10

标签: ios swift uitableview didselectrowatindexpath scroll-position

我在tableView.scrollToRow方法的内部使用didSelectRowAt,以便在选择行时,视图会自动将下一行滚动到屏幕的顶部。我让它工作正常,但我不知道当屏幕上有足够的空间来容纳所有内容时如何处理最后几行。

在下面的示例中,单击第 5 步之后会显示我正在描述的场景。

Example

这是我的相关代码:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        
        let topInstruction = arrayOne[currentArrayOneIndex!].instructions![topInstructionIndex]
        print(topInstructionIndex)
        print(arrayOne[currentArrayOneIndex!].instructions!.count)
        
        // Check if it is the last instruction
        if topInstructionIndex < arrayOne[currentArrayOneIndex!].instructions!.count {
            
            // Change cell colour to green
            let tappedInstruction = tableView.cellForRow(at: indexPath)
            tappedInstruction?.contentView.backgroundColor =  #colorLiteral(red: 0.3411764801, green: 0.6235294342, blue: 0.1686274558, alpha: 1)
            
            topInstructionIndex += 1
            
            // Scroll to the next instruction
            let nextInstruction = IndexPath(row: topInstructionIndex, section: 0)
            tableView.scrollToRow(at: nextInstruction, at: UITableView.ScrollPosition.top, animated: true)
            return
            
        }
        else {
            // Finish the instructions
            print("This is the last instruction.")
            return
        }

    }

有什么我可以添加到 didSelectRowAt(或其他地方)以将最后一行滚动到顶部的内容,即使所有内容都适合屏幕?

1 个答案:

答案 0 :(得分:0)

将以下代码添加到 cellForRowAt 方法即可。

tableView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 500, right: 0)

感谢 @SPatel 和 @congnd 提供的意见,从而得出了这个答案。