2017-01-26 7 views
1

Ich habe eine ziemlich standardmäßige UITableView, die über benutzerdefinierte Zelle aufgefüllt wird. Diese Zelle ist im Moment einfach ein Bild und ein Etikett. Ich kann es für mein Leben nicht ändern.Kann UITableViewAutomaticDimension nicht ordnungsgemäß arbeiten

Wenn ich UITableViewAutomaticDimension einfüge, verliere ich die Fähigkeit, meine Daten zusätzlich zu falschen Layouts zu füllen.

Ohne UITableViewAutomaticDimension werden die Daten ordnungsgemäß angezeigt.

I sindSnapKit mit Einschränkungen zu handhaben und Meteor/SwiftDDP die Daten zu handhaben, aber es ist ein weiterer UITableView in dem Projekt, das richtig zu sein scheint

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 

    } 
} 

Arbeits CommentTableViewDelegate.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() 
    } 
} 

Ein Beispiel für meine verstümmelte Durcheinander, wenn nicht UITableViewAutomaticDimension mit enter image description here

Ein Beispiel für meine verstümmelte Durcheinander, wenn UITableViewAutomaticDimension enter image description here

+0

bitte contentTableView.estimatedRowHeight = 1 // Schätzwert gesetzt, wenn weniger als Arbeit richtig –

Antwort

1

Ich bin nicht sicher zu verwenden, wenn es aber funktioniert, ich habe war in letzter Zeit durch das gleiche Problem, und ich reparierte es, indem ich die estimatedRowHeight änderte.

Können Sie bitte versuchen Sie es einmal mit: -

contentTableView.estimatedRowHeight = 350 

zu, contentTableView.estimatedRowHeight = 160

+0

Dieser den Trick nicht tun. Wo stellst du deine geschätztenRowHeight Linien hin? Vielleicht sind sie anders als meins. –

+0

Sind Sie sicher über die Einschränkungen? Ja, ich habe diese Funktion verwendet, indem ich eine Steckdose von ** tableview ** und 'tableview.metratedRowHeight' während viewDidAppear erstellt habe. – Aashish

4

Es könnte unsachgemäße Einschränkung innerhalb der Zelle zurückzuführen sein. Bitte füge Einschränkung richtig in der Tabellenansicht Zelle und stellen diese beiden Eigenschaften von UILable von Attributen Inspektor Abschnitt von Storyboard:

  • Linien auf 0
  • Zeilenumbruch zu Wort wickelt

oder Sie können auch festlegen, Diese Eigenschaften von Code:

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

Hinweis - nicht die Höhe von UILable beheben.

Hoffe, es wird Ihnen helfen ... :)

Verwandte Themen