如何在UITableView Swift底部插入一个新Row

时间:2016-01-21 18:55:01

标签: ios swift uitableview

我用

func insertRowsAtIndexPaths(indexPaths: [NSIndexPath],
withRowAnimation animation: UITableViewRowAnimation)

在表中插入新行的方法。但它出现在UITableView的顶部(默认情况下)。

我找不到任何从表格底部插入行的选项,例如截图:

New Rows from Bottom

我尝试使用UIEdgeInsetsMake

self.tableView.contentInset = UIEdgeInsetsMake(tableView.frame.height,0,0,0)

但滚动桌子时它打破了所有设计。

我的问题是:如何从表格底部插入新行?

UPD:当添加新行时,它应该看起来像表格从键盘视图移动到NavigationBar。

UPD2 :这就是我想要的:http://recordit.co/JoR7xuvvpG

我是在

的帮助下完成的
self.tableView.contentInset = UIEdgeInsetsMake(tableView.frame.height,0,0,0)

但是contentInset在行上方添加了一个大的白色字段,当我向下滚动时,隐藏了添加的行。看起来他们藏在keyboardView下面。我想阻止它。

4 个答案:

答案 0 :(得分:16)

Swift 3

    TableView.beginUpdates()

    let indexPath:IndexPath = IndexPath(row:(self.yourArray.count - 1), section:0)

    TableView.insertRows(at: [indexPath], with: .left)

    TableView.endUpdates()

    TableView.scrollToRow(at: indexPath, at: .bottom, animated: true)

答案 1 :(得分:3)

func insertRowsAtIndexPaths(indexPaths: [NSIndexPath],
withRowAnimation animation: UITableViewRowAnimation)

这是附加行的方法。要在底部插入行,您需要提供最后一行的索引路径。

例如:

var IndexPathOfLastRow = NSIndexPath(forRow: self.array.count - 1, inSection: 0)
self.tableView.insertRowsAtIndexPaths([IndexPathOfLastRow], withRowAnimation: UITableViewRowAnimation.Left)

答案 2 :(得分:0)

您是否尝试使用UITableViewRowAnimationBottom作为行动画参数?
像这样:(在swift中)

tableView.insertRowsAtIndexPaths([indexPath],   
    withRowAnimation: UITableViewRowAnimation.Bottom)

或Objective-C:

[self insertRowsAtIndexPaths:indexPaths
            withRowAnimation:UITableViewRowAnimationBottom];

答案 3 :(得分:0)

感谢@raf的建议:

您需要执行的操作是在插入元素时为其中的UITableView个父视图设置动画。如果您正在使用autolayout,请捕获属性中的Top约束,并在插入元素时更改它constant。类似的东西:

 topConstraint.constant = newValue
 UIView.animateWithDuration(0.5, animations: { 
  self.layoutIfNeeded() 
})