2016-04-22 16 views
3

Ich benutze automatisch die Größenänderung Zellen in meinem Projekt. Ich möchte die Zellen halten auf ein Minimum height, aber ich kann nicht ein Minimum heightEinschränkung für meine Zellen in meinem Seiten (wie es ausgegraut ist in der New Constraints Ansicht verwenden:UITableViewCell minimale Höhe mit automatisch in der Größe ändernden Zellen

enter image description here

gibt es trotzdem mindestens heightEinschränkungen für meine Zellen hinzufügen?

+1

Der Inhalt Ansicht Größe soll auf dem Tisch Ansicht Verhalten (Stil) und den eigentlichen Inhalt (Subviews) abhängig zu sein. Die Lösung ist einfach: Fügen Sie eine Unteransicht hinzu. –

+1

Was @A-Live scheint die einfachste Lösung zu sein. Sie können eine versteckte Unteransicht hinzufügen, die am oberen und unteren Rand Ihrer Zelle mit einer Höhenbeschränkung fixiert ist (die Breite ist nicht relevant, aber Sie müssen sie irgendwie angeben, um AutoLayout glücklich zu machen). –

+0

Danke, das hat funktioniert (obwohl es keine sehr elegante Lösung ist ...). – nintyapple

Antwort

0

setzen eine Höhe Einschränkung als height >= 60.0 keine Notwendigkeit, etwas

1

Sie tun können, um Ihre Zellen als dynamische Höhe macht durch die UITableViewAutomaticDimension in Höhe Berechnungsmethoden von Tableview zurück. Todo Titel ist die statische Höhe: Aber für diese Ihr Handy Designeinschränkungen wie die unter einem

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    return UITableViewAutomaticDimension; 
} 


- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    return UITableViewAutomaticDimension; 
} 

enter image description here

Hinweis sein sollte. Und die Beschreibung wird dynamische Höhe sein. Die Beschreibung besitzt also keine Höhenbeschränkung. Wichtig ist, dass Sie setzen müssen eine Reihe von Linien als 0 für die Beschreibung Etikett

0

Wenn UITableViewAutomaticDimension aktiviert das System ruft UITableViewCell ‚s systemLayoutSizeFittingSize:withHorizontalFittingPriority:verticalFittingPriority: Methode, um die Zellenhöhe zu berechnen, so dass Sie UITableViewCell und überschreiben diese Methode Unterklasse kann ein Minimum zu zwingen Höhe für die Zelle, auf diese Weise

class MinHeightTableViewCell: UITableViewCell { 

    var minHeight: CGFloat? 

    override func systemLayoutSizeFitting(_ targetSize: CGSize, withHorizontalFittingPriority horizontalFittingPriority: UILayoutPriority, verticalFittingPriority: UILayoutPriority) -> CGSize { 
     let size = super.systemLayoutSizeFitting(targetSize, withHorizontalFittingPriority: horizontalFittingPriority, verticalFittingPriority: verticalFittingPriority) 
     guard let minHeight = minHeight else { return size } 
     return CGSize(width: size.width, height: max(size.height, minHeight)) 
    } 
} 

und dann

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "minHeightCell", for: indexPath) as! MinHeightTableViewCell 
    cell.minHeight = 62 // change with your desidered min height 
    cell.textLabel?.text = "some text" 
    return cell 
} 
0

einfach hinzugefügt Höhe Einschränkung mit minimaler Höhe Sie wollen und es dann Beziehung ändern zu "größer dann gleich". schaue markierten Abschnitt des Bildschirms kurz. enter image description here

0

Führen Sie diese Schritte aus, um die automatische Bemaßung für eine Zelle mit einer Mindesthöhe festzulegen.

  • zuordnen und tableview datasource implementieren und
  • Assign UITableViewAutomaticDimension zu rowHeight & estimatedRowHeight
  • Implementieren delegieren/datasource Methoden übertragen (d.h.heightForRowAt und einen Wert UITableViewAutomaticDimension darauf zurück)

-

Objective C:

// in ViewController.h 
#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> 

    @property IBOutlet UITableView * table; 

@end 

// in ViewController.m 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.table.dataSource = self; 
    self.table.delegate = self; 

    self.table.rowHeight = UITableViewAutomaticDimension; 
    self.table.estimatedRowHeight = UITableViewAutomaticDimension; 
} 

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 

    return UITableViewAutomaticDimension; 
} 

Swift:

@IBOutlet weak var table: UITableView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Don't forget to set dataSource and delegate for table 
    table.dataSource = self 
    table.delegate = self 

    // Set automatic dimensions for row height 
    table.rowHeight = UITableViewAutomaticDimension 
    table.estimatedRowHeight = UITableViewAutomaticDimension 
} 



// UITableViewAutomaticDimension calculates height of label contents/text 
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
    return UITableViewAutomaticDimension 
} 

Für Label-Instanz in UITableViewCell

  • festgelegte Anzahl von Zeilen = 0 (& Zeilenumbruch-Modus = trunkieren tail)
  • Setzen aller Einschränkungen (oben, unten, links) in Bezug auf seinen Super/Zellenbehälter.
  • Hinweis: Legen Sie die Mindesthöhe für das Etikett fest, wenn die vertikale Mindestfläche durch das Etikett abgedeckt werden soll, auch wenn keine Daten vorhanden sind.

enter image description here

Verwandte Themen