聊天设置。 messagetableView底部约束附加到dockView的顶部。不幸的是,tableView messageCell并不符合在tableView上强制使用的相同约束。在我的屏幕截图中,您可以看到黄色的tableView。它从superView的顶部开始,向下延伸到UIViewDock的顶部。白色messageCell不遵循tableView。显然,messageCell是这样做的,因为只有5行消息,所以我如何让tableView底部的白色单元格开始像聊天应用程序一样?
另一个老线程中的某个人说要使用这个Obj-C。
@property (nonatomic, assign) BOOL shouldScrollToLastRow;
- (void)viewDidLoad
{
[super viewDidLoad];
_shouldScrollToLastRow = YES;
}
- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
// Scroll table view to the last row
if (_shouldScrollToLastRow)
{
_shouldScrollToLastRow = NO;
[self.tableView setContentOffset:CGPointMake(0, CGFLOAT_MAX)];
}
}
这是正确的,我如何在Swift中完成?
答案 0 :(得分:1)
使你的messageCell成为表格视图的页脚,因此它将始终粘在表格的底部。你可以在IB中为表添加一个视图,并给它一个IBOutlet(我在下面的代码中称我的页脚)。
@IBOutlet weak var footer: UIView!
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.rowHeight = 44
tableView.tableFooterView = footer
tableView.setContentOffset(CGPoint(x: 0, y: tableView.contentSize.height), animated: false)
}
在“发送”按钮的操作方法中,您可以执行此操作以添加新行并使表格滚动到底部,
@IBAction func sendMessage(sender: UIButton) {
var message = messageField.text
messages.append(message)
let lastPath = NSIndexPath(forRow: messages.count - 1, inSection: 0)
tableView.beginUpdates()
tableView.insertRowsAtIndexPaths([lastPath], withRowAnimation: .Automatic)
tableView.contentSize = CGSize(width: tableView.contentSize.width, height: tableView.contentSize.height + tableView.rowHeight)
tableView.setContentOffset(CGPoint(x: 0, y: tableView.contentSize.height), animated: true)
tableView.endUpdates()
}