2016-05-27 9 views
0

Ich habe einen TableViewController mit dynamischen Zellen, die 3 Beschriftungen und ein ImageView darin enthalten. Ich habe es in einem Storyboard erstellt. Es sieht wie folgt aus ...Steuern der Einschränkung des Zellenelements von TableViewController

 - Label1 
oImg - Label2 
     - Label3 

Und wird Label2 senkrecht zur Imageview zentriert (nennen wir es Constraint-A); und die anderen Labels sind auch auf Label2 ausgerichtet.

Was ich versuche zu tun ist, in cellForRowAtIndexPath in TableViewController, überprüfen Sie, ob Label3 leer ist, verschieben Sie Label2 nach unten und Label1 behält die Einschränkung zuvor (also auch nach unten).

Als erste Option habe ich versucht, Constraint-A mit TableViewController zu verbinden, aber da es TableViewCell ist, kann ich die Constraint-Ausgabe nicht mit TableViewController verbinden.

Dann habe ich versucht, diese manuell nach unten bewegen, aber weirdly nur es zu beeinflussen eine Reihe (erste ohne Label3), während Rest der cellForRowAtIndexPath funktioniert okay ..

cell.Label2.frame.origin.y += 5 
cell.Label1.frame.origin.y += 5 

Was der geeignete Weg ist, dies zu erreichen ? (So ​​kann ich entweder die Constraint-A manuell steuern oder Label2 manuell verschieben und Label1 folgt)

+0

Es auf Zwang abhängt. Sie können ** Constraint Outlet ** zu * YourCusstomCell Class * machen. In cellForRow können Sie überprüfen, ob Ihre Datenquelle für Label3 leer ist. Sie ändern die Einschränkung für diese Methode. Ich denke, Sie müssen alle Etiketten und Bildausgänge machen, um eine Einschränkung zu machen. –

+0

Und es hängt von Ihrer Anforderung ab, dass die Höhe Ihrer Zeile fest ist oder nicht, und Ihr Etikett ist 1 Zeile oder mehrere Zeilen. –

+0

set Label3 Nummer der Zeile 0 und entfernen Sie vertikal mittig zur imageView, wenn der Text leer ist Ihre Label2 automatisch runter –

Antwort

0

Erstellen Sie die IBOutlet-Eigenschaft für die y-cord-Integritätsbedingung von label1 und label2 und ändern Sie dann "your property name" .constraint = "some value" anstatt die Rahmen Y-Schnur zu ändern.

+0

Also erstellen Sie 2 weitere Label für Label1 und Label2 und verstecken/zeigen sie entsprechend? Ich kann keine Steckdose von einem UILabel in TableViewCell zu TableViewController erstellen – senty

+0

Erstellen Sie keine neuen Beschriftungen und erstellen Sie nur ihre y-cord-Einschränkungseigenschaft. –

+1

Erstellen Sie eine benutzerdefinierte Klasse, sagen Sie CustomCell, das von UItableViewCell erbt, und stellen Sie eine Verbindung mit der TableViewCell her, die sich in UItableViewController befindet. Jetzt können Sie eine Eigenschaft in CustomCell erstellen und die Funktion cellforrowatIndexpath von UITableViewController verwenden. –

1

enter image description here enter image description here

//set above image 2 
    cell.constLbl.constant = -(cell.lbl3.frame.size.height/2 - 10); // this obj below img 1 
cell.constLbl3Top.constant = cell.lbl3.frame.size.height/2; // this obj below img 2 

enter image description here enter image description here

+0

Vielen Dank für die ausführliche Antwort. Ranjits Antwort war ein schneller Weg, aber +1 für deine Erklärungen – senty