2016-05-25 15 views
0

Ich habe eine UITableViewCell Unterklasse, die ich die Ansichten alle im Code einrichten und dann NSLayoutConstraints hinzufügen. Alles funktioniert, außer dass meine UITabbleViewCell ihre Höhe nicht korrekt berechnet. HierUITableViewCell Unterklasse mit Auto Layout Einschränkungen inkorrekte Höhe

ist der Code des UITableViewCell

override func updateConstraints() { 
    setupThumbnailImages() 

    super.updateConstraints() 


} 
func setupThumbnailImages() { 

    var imageViewXOrigin : CGFloat = 5.0 
    var imageViewYOrigin : CGFloat = 0.0 

    for thumbnailUrl in self.thumbnailsUrlArray { 

      let miniPictureView = UIImageView() 
      miniPictureView.backgroundColor = UIColor.blueColor() 
      miniPictureView.contentMode = UIViewContentMode.ScaleAspectFill 
      miniPictureView.clipsToBounds = true 
      miniPictureView.frame = CGRectMake(0, 0, 0, 0) 


      miniPictureView.translatesAutoresizingMaskIntoConstraints = false 



     if((imageViewXOrigin + 50) > frame.size.width){ 
      imageViewYOrigin += 50 
      imageViewXOrigin = 5 

     } 

     contentView.addSubview(miniPictureView) 
     contentView.addConstraint(NSLayoutConstraint(item: miniPictureView, attribute: .Leading, relatedBy: .Equal, toItem: contentView, attribute: .Leading, multiplier: 1, constant: imageViewXOrigin)) 
     contentView.addConstraint(NSLayoutConstraint(item: miniPictureView, attribute: .Top, relatedBy: .Equal, toItem: contentView, attribute: .Top, multiplier: 1, constant: imageViewYOrigin)) 
     contentView.addConstraint(NSLayoutConstraint(item: miniPictureView, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .Height, multiplier: 1, constant: 50)) 
     contentView.addConstraint(NSLayoutConstraint(item: miniPictureView, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .Width, multiplier: 1, constant: 50)) 

     let lastImage = thumbnailsUrlArray.last 
     if (lastImage == thumbnailUrl){ 
      contentView.addConstraint(NSLayoutConstraint(item: miniPictureView, attribute: .Bottom, relatedBy: .Equal, toItem: contentView, attribute: .Bottom, multiplier: 1, constant: 0)) 

     } 

      imageViewXOrigin += 50 

     } 

    contentView.translatesAutoresizingMaskIntoConstraints = false 
      contentView.addConstraint(NSLayoutConstraint(item: contentView, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .Height, multiplier: 1, constant: imageViewYOrigin)) 
} 

Was passiert, ist die miniPictureView zeigt, wie es sollte, aber seine angezeigt außerhalb der UITableViewCell ‚s bounds und die Zelle bleibt in einer Höhe von 44

Antwort

2

Wenn Sie die Zelle an Größe selbst auf der Grundlage ihrer Inhalte möchten, stellen Sie sicher, dass Sie die folgenden auf Ihrem UITableView setzen:

tableView.rowHeight = UITableViewAutomaticDimension 
tableView.estimatedRowHeight = 44.0 // Or any other estimate you want, just make sure to set this to some value 

Noch ein paar Anmerkungen:

  1. Ihre miniPictureView Einschränkungen miniPictureView hinzugefügt werden soll selbst, da sie

  2. Um Selbst Sizing Sie arbeiten nicht contentView oder ein Geschwister Ansicht beinhalten, müssen auch eine komplette Kette von Einschränkungen von der Spitze der contentView nach unten haben. Daher sollten Sie eine Gleichheitsbedingung zwischen dem Ende von miniPictureView und contentView hinzufügen, sodass es eine Einschränkung gibt, die das Ende der Inhaltsansicht tatsächlich verschiebt.

  3. Ich vermute, dass Ihre letzten zwei Zeilen nicht helfen. Die Höhe des contentView sollte festgelegt werden, indem der obere und der untere Rand des Inhalts eingeschränkt werden. Und die Autorisierungsmaske wird verwendet, um die Zelle und ihre contentView zusammen zu skalieren. Wenn Sie dies auf false setzen, sollten Sie es zumindest durch Code ersetzen, der den Rahmen der Zelle so einstellt, dass er gleich dem contentView-Rahmen ist, NACHDEM das Layout berechnet wurde.

+0

Sorry, ich habe vergessen hinzuzufügen, das ich schon gesetzt habe. Alle meine anderen Zellen funktionieren gut. Nur hier, wo ich alles im Code mache. – Tander

+0

@Tander aktualisierte meine Antwort mit einigen weiteren Vorschlägen –

+0

Danke für die Hilfe, ich gebe jedem Vorschlag einen Versuch und melde mich zurück – Tander

Verwandte Themen