如何在swift中使用scrollToRow(at:at:animated :)?

时间:2018-04-27 05:27:17

标签: ios swift uitableview

我正在创建一个聊天界面。

将用户的消息放入新的UITable视图单元格中。

更新表视图时,我使用以下代码。

extension UITableView {

    func scrollToBottom() {
        let rows = self.numberOfRows(inSection: 0)

        if rows > 0 {
            let indexPath = IndexPath(row: rows - 1, section: 0)
            self.scrollToRow(at: indexPath, at: .bottom, animated: true)
        }
    }
}

实际上这效果好一点,但有些奇怪。

当我关闭应用并再次打开它,或退出屏幕并再次进入后,会出现以下问题。

问题在于,当我添加一个新单元格时,它会上升到表格视图中的第一个单元格并返回到最后一个单元格。

随着细胞数量的增加,滚动变得太快而且太乱了。

我只想继续更新新注册的最后一个单元格。

我该怎么办?

2 个答案:

答案 0 :(得分:0)

 func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {

        let newText = (textView.text as NSString).stringByReplacingCharactersInRange(range, withString: text)
        let numberOfChars = newText.characters.count // for Swift use count(newText)
        let typedStr : String = textView.text
        var compArr = typedStr.componentsSeparatedByString("\n")
        _ = newText.componentsSeparatedByString("\n")
        self.sendBtn.setTitle("Send", forState: .Normal)

        if numberOfChars > 0 {

            self.sendBtn.enabled = true
        }
        else {

            self.TextViewHeight.constant = TEXTVIEW_OFFSET
            self.sendBtn.enabled = false
        }
        let  char = text.cStringUsingEncoding(NSUTF8StringEncoding)!
        let isBackSpace = strcmp(char, "\\b")

        if text == "\n"
        {
            print("Return_Pressed")
            if  compArr.count == 1 || compArr.count == 2 || compArr.count == 3
            {
                self.TextViewHeight.constant =  self.TextViewHeight.constant + 25
                self.tableViewScrollToBottom(false)
            }
            else
            {

            }
        }
    }



func tableViewScrollToBottom(animated: Bool) {

      dispatch_async(dispatch_get_main_queue()) {

                let numberOfSections = self.ChatTableView.numberOfSections
                let numberOfRows = self.ChatTableView.numberOfRowsInSection(numberOfSections-1)

                if numberOfRows > 0 {

                    let indexPath = NSIndexPath(forRow: numberOfRows-1, inSection: (numberOfSections-1))
                    self.ChatTableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: UITableViewScrollPosition.Bottom, animated: animated)
                }

            }
    }

答案 1 :(得分:0)

尝试使用scrollToBottom方法调用viewWillAppear函数。也许只需要在返回TableViewController时更新行数。