我试图弄清楚一旦数据库中的消息加载到UITableView的底部,该如何滚动到它的底部。我尝试使用tableView.setContentOffset(CGPointMake(0, CGFloat.max), animated: true),但是我的表从其中包含所有消息变为一无所有。我也尝试过

var iPath = NSIndexPath(forRow: messagesArray.count - 1, inSection: 0)
tableView.scrollToRowAtIndexPath(iPath, atScrollPosition: UITableViewScrollPosition.Bottom, animated: true)

但我得到了EXC_BAD_ACCESS code = 1。任何帮助,将不胜感激。

编辑:

在Parse从query.findObjectsInBackgroundWithBlock(...)找到数据之后,我将这段代码放在viewDidAppear()函数中,不确定是否有区别。

这是查询代码:
    query.findObjectsInBackgroundWithBlock { (object, error) -> Void in
                    if (error == nil) {
                        for var i = 0; i < object!.count; i++ {
                            var messageObject = Messages()

                            messageObject.messageID = object![i]["messageID"] as! String

                            println("MESSAGE ID")
                            println(messageObject.messageID)

                            messageObject.messageText = object![i]["message"] as! NSString as String

                            println("MESSAGE TEXT")
                            println(messageObject.messageText)

                            messageObject.recipientID.append(object![i]["recipientID"] as! NSString as String)

                            println("RECIPIENT")
                            println(messageObject.recipientID[0])

                            messageObject.senderID = object![i]["senderID"] as! NSString as String
                            messageObject.timeStamp = object![i]["timeStamp"] as! NSString as String

                            println("TIMESTAMP")
                            println(messageObject.timeStamp)

                            dispatch_async(dispatch_get_main_queue(), { () -> Void in
                                self.messagesArray.append(messageObject)
                            })
                        }


                        self.loadObjects()
                        self.tableView.reloadData()
                        self.tableView.setContentOffset(CGPointMake(0, CGFloat.max), animated: true)
                    }
    }

最佳答案

尝试这个

- (void) viewDidAppear:(BOOL)animated
{
  [super viewDidAppear:animated];
  if (tableView.contentSize.height > tableView.frame.size.height)
    {
      CGPoint offset = CGPointMake(0, tableView.contentSize.height -tableView.frame.size.height);
      [tableView setContentOffset:offset animated:YES];
   }
}

在SWIFT
if tableView.contentSize.height > tableView.frame.size.height
    {
        let offset = CGPoint(x: 0, y: tableView.contentSize.height - tableView.frame.size.height)
        tableView.setContentOffset(offset, animated: true)
    }

关于ios - 消息加载时滚动到UITableView的底部,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30253424/

10-11 18:27