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.
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?
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Xcode festlegen der Priorität ganz unten vertikale Einschränkung 750 (oder etwas weniger als 1000).
Könnte es sein, dass die widersprüchlichen Zwänge sind da die ersten beiden constraints definieren Sie die Breite des Etiketts als 16pts weniger als die Breite der Zelle, aber die Dritte Einschränkung, die
UIView-Encapsulated-Layout-Width
machen möchte, ist das Etikett eine andere Größe.Könnten Sie versuchen, sich zum senken der Werte die content-Kompression Widerstand/umarmt Eigenschaften zu ermöglichen, das Etikett zu ignorieren, seine innere Größe.
Es scheint wie ein bug von Apple. Ich benutze ein umgehen, fügen Sie
width
constraint zur Laufzeit wie dieser.Zelle.layoutIfNeeded() - nicht machen zu müssen.
Erstellen Sie ein IBOutlet NSLayoutConstraint