2016-08-22 2 views
1

Also, ich möchte eine Einschränkung hinzufügen, die eine maximale Höhe auf jeder Zelle, die kleiner oder gleich 2/3 der Höhe der UITableView ist erzwingen.Fügen Sie NSLayoutContraint zwischen UITableViewCell und UITableView hinzu.

Wie kann ich das erreichen?

Hinzufügen der Einschränkung in func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell ist keine Option, da die Zelle nicht in der UITableView ist, so beschwert es sich, dass sie keine gemeinsame Superview haben.

Also im Grunde, wie bezog ich meine UITableViewCell s und meine UITableView mit NSLayoutContraint s?

+0

Müssen Sie hier eine Einschränkung verwenden, können Sie nicht einfach die Zellenhöhe innerhalb von heightForRowAtIndexPath berechnen? z.B. return tableView.frame.size.height * 2/3 –

Antwort

2

Nun, Sie können es nicht so machen. Was Sie tun können, ist, die Höhe der Tabellenansicht zu erhalten und dann eine Höhenbeschränkung für Ihre Zellen in dieser Menge hinzuzufügen. Fügen Sie also im Interface Builder eine Höhenzwangsbeschränkung für Ihre Zelle hinzu und legen Sie sie auf einen geeigneten Wert fest (um nur zu sehen, was in der Tabelle enthalten ist, wird sie aus dem Code aktualisiert). Fügen Sie dann eine Referenz im Code für diese Einschränkung hinzu. Dann in update der Wert der Nebenbedingung:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("cellidentifier", forIndexPath: indexPath) as! YourCustomCell 
    cell.heightConstraint.constant = 2.0 * tableview.frame.size.height/3.0 
} 

Dies ist, wenn Sie dynamische Zellen verwenden. Andernfalls können Sie einfach überschreiben: func tableView(_ tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat und geben Sie die gewünschte Größe zurück.

+0

Nicht so elegant wie das was ich suchte, aber es war eine nette Idee. Auf jeden Fall funktioniert es nicht, weil "cell.heightContraint" zu dieser Zeit "nil" ist. –

+0

Es sollte nicht sein. Es ist nur eine regelmäßige Steckdose. Es sollte genauso funktionieren, wie ein Label oder ein View-Outlet funktioniert. Stellen Sie sicher, dass Sie die richtige Zelle verwenden und dass Ihre Einschränkung aktiv ist. Wenn Sie sie deaktivieren, wird die Zuordnung aufgehoben, wenn Sie sie nicht als "stark" angeben. – Jelly

+0

das macht keinen Sinn, warum würde es freigegeben werden, wenn aktiv auf false gesetzt? –

Verwandte Themen