2017-01-26 9 views
1

У меня есть довольно стандартный UITableView, который заполняется через пользовательскую ячейку. Эта ячейка - это просто образ и ярлык на данный момент. Я не могу, для жизни меня, заставить его изменить его самостоятельно.Не удается заставить UITableViewAutomaticDimension работать правильно

Когда я включаю UITableViewAutomaticDimension, я теряю возможность заполнять свои данные в дополнение к неправильным макетам.

Без UITableViewAutomaticDimension данные отображаются правильно.

Я я с помощью SnapKit для обработки ограничений и Meteor/SwiftDDP для обработки данных, но есть еще один UITableView в проекте, который, кажется, работает правильно

ViewController

class CommentViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 
    var commentTable:UITableView! 
    var comments:MeteorCollection<Comment>! 

    init() { 
     super.init(nibName: nil, bundle: nil) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     comments = MeteorCollection<Comment>(name: "comments") 

     createView() 

     Meteor.subscribe("postsComments", params: [["postId": self.source!.id!]]) {} 
    } 

    func createView() { 
     let contentTableView = UITableView(frame: content.frame) 
     content.addSubview(contentTableView) 
     contentTableView.backgroundColor = UIColor.clearColor() 
     self.commentTable = contentTableView 
     contentTableView.delegate = self 
     contentTableView.dataSource = self 

     contentTableView.snp_makeConstraints { (make) -> Void in 
      make.top.equalTo(content) 
      make.left.equalTo(content) 
      make.right.equalTo(content) 
      make.height.equalTo(content).inset(65) 
     } 

     contentTableView.rowHeight = UITableViewAutomaticDimension 
     contentTableView.estimatedRowHeight = 350 

    } 
} 

КомментарийTableViewDelegate.swift

import UIKit 

extension CommentViewController { 
    func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return 1 
    } 
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return self.comments.count 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier(CommentTableViewCell.reuseIdentifier, forIndexPath: indexPath) as UITableViewCell 

     cell.setNeedsUpdateConstraints() 
     cell.updateConstraintsIfNeeded() 
     if let card = cell as? CommentTableViewCell { 
      let item = self.comments.sorted[indexPath.row] 
      card.populate(item) 
     } 

     return CommentTableViewCell() 
    } 

    func reloadTableView() { 
     self.commentTable.reloadData() 
    } 
} 

Пример моей искаженном беспорядок, когда не с помощью UITableViewAutomaticDimension enter image description here

пример моего искаженного беспорядок при использовании UITableViewAutomaticDimension enter image description here

+0

установите contentTableView.estimatedRowHeight = 1 // оценочного значения, если меньше, то работу должным образом –

ответ

1

Я не уверен, если он работает, но, у меня в той же проблеме недавно, и я исправил ее, изменив estimatedRowHeight.

Можете ли вы попробовать один раз: -

contentTableView.estimatedRowHeight = 350 

к, contentTableView.estimatedRowHeight = 160

+0

Это не сделать трюк. Где вы размещаете свои ориентированные строки RowHeight? Возможно, они отличаются от моих. –

+0

вы уверены в ограничениях? Да, я использовал эту функцию, создав выход ** tableview ** и 'tableview.estimatedRowHeight' while viewDidAppear. – Aashish

4

Это может быть из-за неправильного ограничения внутри клетки. Пожалуйста, добавьте ограничение должным образом в ячейке просмотра таблицы и установить эти два свойства UILable из атрибутов инспектор секции раскадровки:

  • линий 0
  • Обрыв цепи к слову обернуть

или вы можете также установить эти свойства из кода:

self.lblxyz.numberOfLines = 0 
self.lblxyz.lineBreakMode = .byWordWrapping 

Примечание. Не устанавливайте высоту UILable.

Надеется, что это поможет ... :)