2

Ich versuche, Einschränkungen zwischen zwei Elementen innerhalb eines UITableViewController hinzuzufügen und bisher konnte ich nicht. The UIImage View innerhalb des UITableViewControllers, aber außerhalb der UITableView-Zelle.NSLayoutConstraint zwischen UIImageView und UITableViewCell hinzufügen

Ich kann StoryBoard weder verwenden noch Einschränkungen programmatisch hinzufügen, weil Xcode mir sagt, dass ich keine Einschränkung für ein Objekt hinzufügen kann, das wiederverwendet werden soll.

Der Grund, warum ich versuche, eine Einschränkung hinzuzufügen, ist, weil die Größe der UIImageView dynamisch durch die Größe des Bildes, das heruntergeladen wird, geändert wird. Wenn das Bild aus irgendeinem Grund nicht heruntergeladen werden kann, verwendet es ein Standardbild und das gesamte Layout fällt auseinander.

Hier ist, was meine Tableview wie folgt aussehen:

enter image description here

+0

Haben Sie darüber nachgedacht, Ihre UIImageView in UITableViewCell Zugabe und Platziere es als erste Zelle in tableView und ändere die Höhe der Zelle, wann immer du das Bild vom Server bekommst? –

+0

@ noir_eagle, nein habe ich nicht, aber das ist eine gute Idee. Ich werde es versuchen. Vielen Dank. – Sicypher

+0

@ noir_eagle sollten Sie Ihren Kommentar als Antwort posten. Ich werde es als die beste Antwort akzeptieren, weil es am besten für mich funktioniert. – Sicypher

Antwort

1

Sie können prüfen, Ihre UIImageView in UITableViewCell wickeln und sie als die erste Zelle in der UITableView setzen. Darüber hinaus können Sie die Hierarchie Ihrer Zellen in der Tabellenansicht in zwei Abschnitte aufteilen, um das Verfolgen Ihrer Zellen zu erleichtern. So würde der erste Abschnitt nur die Zelle UIImageView enthalten und der zweite Abschnitt würde Ihre Hauptzellen enthalten.

Jedes Mal, wenn Sie die Antwort vom Netzwerk Anfrage erhalten, die anzeigt, dass das Bild geholt wird, können Sie tableView.reloadSections(IndexSet(integer: 0), with: .none) und in der Delegatmethode Rückruf die richtige Höhe

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) { 
    if indexPath.section == 0 { 
    return imageHeight 
    } 
} 
1

Das Problem besteht darin, dass eine Beziehung zwischen zwei Objekten gesetzt Einschränkungen. Da Ihre TableViewCell wiederverwendet wird, können Sie die Einschränkungen für Objekte außerhalb der Zelle nicht festlegen.

Tatsächlich können Sie die Größe des Bilds in der Zelle abrufen und die Integritätsbedingung nach cellImageView programmatisch außerhalb von ImageView festlegen.

Zum Beispiel, wenn die heruntergeladene Bildbreite imageCellWidth ist, und Ihr übergroßes imageView sollte 2 mal größer sein.

NSLayoutConstraint *imageViewWidth = [NSLayoutConstraint 
            constraintWithItem:imageView 
            attribute:NSLayoutAttributeWidth 
            relatedBy:NSLayoutRelationEqual 
            toItem:nil 
            attribute:NSLayoutAttributeNonAnAttribure 
            multiplier:1.0f 
          constant:imageCellWidth*2]; 
[imageView addConstraint: imageViewWidth]; 

Wenn Sie diese Einschränkung dynamisch ändern müssen, ändern Sie einfach den konstanten Wert

imageViewWidth.constant = newWidth; 
Verwandte Themen