2014-12-24 13 views
6

Ich implementiere eine Funktionalität, in der alle Etiketten meiner Zelle wurde in der Größe geändert, wie der Text mit jedem Etikett. Ich habe diese Funktionalität mit Hilfe von RayWanderlich tutorial und seine Arbeit implementiert gut für iPhone 4s, 5 und 5s mit iOS 8.1. wie, unter dem in Bild gezeigt zeigt iPhone 5s Simulator mit iOS 8,1Dynamische Höhe in Zelle Problem in iPhone6 ​​und iPhone6 ​​plus

enter image description here

, während ich meine App mit iPhone 6 oder iPhone 6 leite und ich bekam ein unerwartetes Verhalten, wie unten Bild gezeigt, das iPhone 6 Simulator

enter image description here

und iPhone 6 Plus Simulator.

enter image description here

Ich habe zwei benutzerdefinierte Zelle eines für iPhone 4,4s nib-Dateien erstellt, 5 und 5 s und zweiten für iPhone 6 und 6 Plus. Da ich neu mit Auto-Layout bin, habe ich beide Nibs gleich gesetzt. Ich zeige sowohl benutzerdefinierte Zellen-Nib-Dateien mit festgelegten Einschränkungen unter Bildern. auch

iPhone 4,4s, 5 und Feder 5s Datei Snapshot

enter image description here

iPhone 6 und iPhone 6 Plus nib Benutzerdefinierte Zelle Datei Snapshot

enter image description here

I verwendet das folgende Code-Snippet von dem aus die Größe der Zelle mit der dynamischen Höhe geändert wurde. Der Code funktioniert für iPhone iPhone 4 (für iOS 7), 4s, 5 und 5s (für iOS 7 und iOS 8 und 8.1) gut, aber nicht für iPhone 6 und iPhone 6 plus.

Code Snippet

- (CGFloat)calculateHeightForConfiguredSizingCell_3:(MemberListTableViewCell_WithoutImage_3_iPhone *)sizingCell { 


    sizingCell.bounds = CGRectMake(0.0f, 0.0f, CGRectGetWidth(self.tblView.frame), CGRectGetHeight(sizingCell.bounds)); 

    [sizingCell setNeedsLayout]; 
    [sizingCell layoutIfNeeded]; 

    CGSize size = [sizingCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]; 

    //CGSize size = [sizingCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize withHorizontalFittingPriority:UILayoutPriorityDefaultHigh verticalFittingPriority:UILayoutPriorityDefaultHigh]; 

    return size.height + 1.0f; // Add 1.0f for the cell separator height 
} 

Bitte geben Sie mir eine richtige Lösung, wo ich wrong.I haben gesurft viele Dinge werde aber nicht in der Lage die richtige Weg, um dieses Problem zu lösen. Ihre Hilfe wäre spürbar. Vielen Dank im Voraus.

Antwort

0

Nach Ihrer Frage der Zellenhöhe in iPhone6,6 Plus müssen Sie unter Zeilen schreiben.

tableView.estimatedRowHeight = 44.0 
tableView.rowHeight = UITableViewAutomaticDimension 

Dynamische Zellengröße mit Auto Layout Referenz: http://www.appcoda.com/self-sizing-cells/

0

Gibt es einen Grund, warum Sie zwei verschiedene xibs für die gleiche Zelle haben? Der ganze Sinn von AutoLayout ist, dass ein einzelnes Layout flexibel genug sein kann, um alle Bildschirmgrößen zu unterstützen.

Wenn die automatische Dimensionierung Zellen verwenden, sind die wichtigsten Dinge zu erinnern:

  • tableView.estimatedRowHeight = <estimated_value>
  • tableView.rowHeight = UITableViewAutomaticDimension
  • Vergewissern Sie sich ein nicht-mehrdeutig Layout innerhalb Ihrer UITableViewCell Unterklasse haben und alle Elemente sind Subviews von .contentView

Ihr Layout sieht wie eine perfekte Passform füraus 0. Ich würde vorschlagen, eine vertikale UIStackView mit Ihren 3 Etiketten zu verwenden. Dann eine horizontale UIStackView, die die vorherige UIStackView und die UIImageView enthält. Die einzige NSLayoutConstraints müssten Sie würden erstellen, um die äußere UIStackView Pinning auf allen Seiten von .contentView

Für weitere Informationen über UIStackViews, überprüfen Sie mein Blog-Post out:

http://www.raizlabs.com/dev/2016/04/uistackview/

Verwandte Themen