How to populate UITableView from the bottom upwards? How to populate UITableView from the bottom upwards? ios ios

How to populate UITableView from the bottom upwards?


To populate UITableView from the bottom:

- (void)updateTableContentInset {    NSInteger numRows = [self.tableView numberOfRowsInSection:0];    CGFloat contentInsetTop = self.tableView.bounds.size.height;    for (NSInteger i = 0; i < numRows; i++) {        contentInsetTop -= [self tableView:self.tableView heightForRowAtIndexPath:[NSIndexPath indexPathForItem:i inSection:0]];        if (contentInsetTop <= 0) {            contentInsetTop = 0;            break;        }    }    self.tableView.contentInset = UIEdgeInsetsMake(contentInsetTop, 0, 0, 0);}

To reverse the order of elements:

dataSourceArray = dataSourceArray.reverseObjectEnumerator.allObjects;

Swift 4.2/5 version:

func updateTableContentInset() {    let numRows = self.tableView.numberOfRows(inSection: 0)    var contentInsetTop = self.tableView.bounds.size.height    for i in 0..<numRows {        let rowRect = self.tableView.rectForRow(at: IndexPath(item: i, section: 0))        contentInsetTop -= rowRect.size.height        if contentInsetTop <= 0 {            contentInsetTop = 0            break        }    }    self.tableView.contentInset = UIEdgeInsets(top: contentInsetTop,left: 0,bottom: 0,right: 0)}

Swift 3/4.0 version:

self.tableView.contentInset = UIEdgeInsetsMake(contentInsetTop, 0, 0, 0)


first reverse uitableview

    tableView.transform = CGAffineTransformMakeScale (1,-1);

then reverse cell in cell create.

- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;    ...    cell.contentView.transform = CGAffineTransformMakeScale (1,-1);


Swift 4.0 and 4.2 version

First reverse UITableView in viewDidLoad

override func viewDidLoad() {        super.viewDidLoad()        tableView.transform = CGAffineTransform(scaleX: 1, y: -1)}

Then reverse the cell in cellForRowAt.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {        guard let cell = tableView.dequeueReusableCell(withIdentifier: "MyTableViewCell", for: indexPath) as? MyTableViewCell else { fatalError() }        cell.contentView.transform = CGAffineTransform(scaleX: 1, y: -1)        return cell    }