AutoLayout Pausen Einschränkungen bei der layoutIfNeeded() aufgerufen wird

Ich versuche zu implementieren, die eine dynamische Höhe UITaleViewCell im UITableView mit XCode6 mit Swift.

Legte ich mein Handy wie folgt, indem die Einschränkungen grafisch(Screenshot ist von XCode5, wegen der NDA auf XCode6). Ich habe auch die BodyLabel Line-Break-Eigenschaft 'Word-Wrap', und legen Sie die Nummer der Zeile auf '0' um mehrere Zeilen zulassen.

AutoLayout Pausen Einschränkungen bei der layoutIfNeeded() aufgerufen wird

Nun, wenn ich einfach den Zellinhalt innerhalb tableView(tableView: UITableView?, cellForRowAtIndexPath indexPath: NSIndexPath?) Methode, dann bekomme ich die dynamische Höhe korrekt Verhalten.

Allerdings, da war ich auf tutorials online verfügbar(speziell diese eine), habe ich noch eine andere Methode, um zu bestimmen, die Höhe der Zelle mit tableView(tableView: UITableView!, heightForRowAtIndexPath indexPath: NSIndexPath!).
In dem tutorial, das ich habe, erzählte Sie mir noch cell.layoutIfNeeded(), also fügte ich das auch.

override func tableView(tableView: UITableView!, heightForRowAtIndexPath indexPath: NSIndexPath!) -> CGFloat {

    var cell = tableView!.dequeueReusableCellWithIdentifier(kCellIdentifier) as GroupFeedCell

    //Configure the cell
    if let frc = self.fetchedResultsController {
        let feed = frc.objectAtIndexPath(indexPath) as GroupFeed
        cell.titleLabel.text = feed.name
        if let message = feed.message {
            cell.bodyLabel.text = message
        }
    }

    //Layout the cell
    cell.layoutIfNeeded()

    //Get the height
    var height : CGFloat = cell.contentView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize).height
    return height
}

Allerdings, wenn ich das Programm ausgeführt, obwohl der Tabellenansicht noch immer angezeigt wird, die dynamischen Höhen der Zellen richtig, es erscheint der Fehler wie dieser:

2014-07-27 13:59:22.599 FBGroups[4631:979424] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each    constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or    constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer    to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0x17809e780 H:[UILabel:0x14fd12f50'Body Label Contents...']-(8)-|   (Names:    '|':UITableViewCellContentView:0x178185d70 )>",
    "<NSLayoutConstraint:0x17809e7d0 H:|-(8)-[UILabel:0x14fd12f50'Body Label Contents...']   (Names:    '|':UITableViewCellContentView:0x178185d70 )>",
    "<NSLayoutConstraint:0x17809ea50 'UIView-Encapsulated-Layout-Width' H:[UITableViewCellContentView:0x178185d70(0)]>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x17809e780 H:[UILabel:0x14fd12f50'Body Label Contents...']-(8)-|   (Names:     '|':UITableViewCellContentView:0x178185d70 )>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.  

Ich versuchte herauszufinden, was möglicherweise schief gegangen ist, und verbringen eine gute Menge an Zeit auf, und ich habe herausgefunden, dass immer wenn ich löschen cell.layoutIfNeeded() Methode, dann die Einschränkungen der Fehler verschwindet.

Und es schien, dass unter den Einschränkungen, die in Konflikt sind, UIView-Encapsulated-Layout-Width war nicht die, die ich Hinzugefügt, und andere als die, die alle Einschränkungen schaute unschuldig zu mir. Ich habe versucht, die Suche durch das, was Sie erzeugen könnte UIView-Encapsulated-Layout-Width Einschränkungen, aber ich konnte nicht die befriedigende Erklärung in meiner situation. Ich würde gerne wissen, was wäre die Ursache dieser Fehlermeldung und wie dieses problem zu beheben.

Auch, kann mir jemand erklären, was der Zweck der Berufung cell.layoutIfNeeded() Methode in die Berechnung der Höhe der Zelle, und wenn es notwendig wäre? Die meisten tutorials wurden, deckt dynamische Höhe UITableViewCell verwertet diese Methode, obwohl mein Programm noch Zellen korrekt angezeigt, ohne dass die Methode aufrufen, und immer wenn ich versuchte zu verwenden, die Methode, es verursacht die Ausnahmen.

  • Waren Sie in der Lage, dieses Problem zu beheben?
  • Ich bin auch mit diesem problem. Hast du es behoben?
  • haben Sie versucht, die Einstellung der preferredMaximumWidth auf dem Etikett?
InformationsquelleAutor YShin | 2014-07-27
Schreibe einen Kommentar