2015-03-22 2 views
1

Чат настроен. messagetableView нижнее ограничение, прикрепленное к вершине dockView. К сожалению, tableView messageCell не соответствует тому же ограничению, которое принудительно применяется к tableView. На моем снимке экрана вы можете увидеть желтый стол. Он начинается в верхней части супервизора и продолжается до вершины UIViewDock. Белый messageCell не следует за TableView. Очевидно, что messageCell делает это, потому что есть только 5 строк сообщений, так как я могу заставить белую ячейку начать в нижней части таблицыView, как приложения для чата?как положить сообщениеCell внизу таблицыView? * Swift *

Кто-то в другой старой теме сказал использовать этот 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)]; 
} 
} 

Это правильно и как я могу сделать это в Свифт?

enter image description here

+0

Возможное решение, на самом деле не достаточно деталей, чтобы гарантировать изготовление это ответ, но вы можете перевернуть свой 'UITableView' вверх дном. Затем ваши клетки начнут снизу и прокладывают себе путь к вершине. Когда вы добавляете ячейки, вы всегда можете добавить их в первую позицию. С другой стороны, несколько мобильных приложений для обмена сообщениями не сохраняют сообщения внизу. Они работают так же, как и сейчас. – Kyle

+0

Привет. Я использую Line, WeChat, QQ и HelloTalk, и все они начинаются снизу со старыми сообщениями вверху. iMessage, похоже, работает так, как вы сказали, с новыми сообщениями, начинающимися сверху, но даже сообщения iMessage внизу внизу, если вы заполнили экран сообщениями. Я хочу, чтобы это выглядело, потому что я думаю, что более естественно видеть историю над новым текстом. ** Я мог бы быть в порядке с этим способом iMessage, но потом у меня есть другие проблемы, потому что в моем приложении док и tableView должны быть в состоянии двигаться. –

ответ

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() 
    } 
+0

@ Ринго, я думаю. Что бы ни было внизу, с изображением камеры и кнопкой «Отправить». Я отредактировал свой ответ. – rdelmar

+0

@Ringo, у вас есть другая реализация viewDidLoad в том же файле? – rdelmar

+0

@Ringo, я говорю не обо всем приложении, а только в этом одном контроллере. У вас может быть только один viewDidLoad в любом одном контроллере. – rdelmar

Смежные вопросы