2016-12-26 5 views
1

Meine Tabellenansicht Zeilen sind nicht dehnen, um die Bildansichten passen und die Bildansichten sind überlappend. enter image description hereTabellenansicht dynamische Höhe Zeilen nach Inhalt Höhe

stellte ich die Tableview in automatischer Dimension und den Boden des Imageview zur

Es muss etwas fehlt Zelle einschränken, aber ich kann nicht herausfinden, was.

tableviewcell

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
{ 
    self.photoImageView = [[UIImageView alloc]init]; 
    if (!(self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) 
     return nil; 

    [self.contentView addSubview:self.photoImageView]; 

    [self setConstraints]; 

    return self; 
} 

-(void) layoutSubviews { 
    [super layoutSubviews]; 

    self.nameLabel.preferredMaxLayoutWidth = self.nameLabel.frame.size.width; 

    [self setConstraints]; 

} 

- (void) setConstraints { 

    UILayoutGuide *margins = self.contentView.layoutMarginsGuide; 

    self.photoImageView.translatesAutoresizingMaskIntoConstraints = false; 
    [self.photoImageView.topAnchor constraintEqualToAnchor:self.contentView.topAnchor constant:7].active = YES; 
    [self.photoImageView.bottomAnchor constraintGreaterThanOrEqualToAnchor:self.contentView.bottomAnchor constant:12].active = YES; 
    [self.photoImageView.leadingAnchor constraintEqualToAnchor:self.contentView.leadingAnchor constant:8].active = YES; 
    [self.photoImageView.heightAnchor constraintEqualToConstant:65].active = YES; 
    [self.photoImageView.widthAnchor constraintEqualToConstant:65].active = YES; 
    self.photoImageView.contentMode = UIViewContentModeScaleAspectFit; 
    self.photoImageView.layer.cornerRadius = self.photoImageView.frame.size.height/3; 
    self.photoImageView.layer.masksToBounds = YES; 

} 

Tableviewcontroller

- (void)viewDidLoad { 
    [super viewDidLoad]; 


    //tableview 
    NSString *cellIdentifier = @"cell"; 
    [self.businessesTableView registerClass:[YPBusinessTableViewCell class] forCellReuseIdentifier:cellIdentifier]; 
    self.businessesTableView.delegate = self; 
    self.businessesTableView.dataSource = self; 
    self.refreshControl = [[UIRefreshControl alloc]init]; 
    [self.businessesTableView addSubview:self.refreshControl]; 
    [self.refreshControl addTarget:self action:@selector(refreshTable) forControlEvents:UIControlEventValueChanged]; 

    UIEdgeInsets insets = self.businessesTableView.contentInset; 
    insets.bottom += YPInfiniteScrollActivityView.defaultHeight; 
    self.businessesTableView.contentInset = insets; 

    self.businessesTableView.estimatedRowHeight = 120; 
    self.businessesTableView.rowHeight = UITableViewAutomaticDimension; 

    UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; 

    UIBarButtonItem *filter = [[UIBarButtonItem alloc] initWithTitle:@"Filter" style:UIBarButtonItemStylePlain target:self action:@selector(presentFilterView)]; 
    negativeSpacer.width = -14; 

    [self.navigationItem setLeftBarButtonItems:@[negativeSpacer, filter] animated:NO]; 


    [self setConstraints]; 
    [self doSearch:@"test"]; 

    [self setupInfiniteScrollView]; 
    [self addSearchBar]; 
    [self hideErrorView:self.errorView]; 


} 

EDIT:

ich mein Problem herausgefunden wurde die Änderung dieser Linie

[self.contentView.bottomAnchor constraintGreaterThanOrEqualToAnchor:self.photoImageView.bottomAnchor constant:0].active = YES; 

ich das b beschränken benötigt ottom anchor des contentView zum imageView und nicht umgekehrt.

Einziges Problem ist jetzt meine Tableview lädt zunächst mit sehr kleinen Zellen dann, wenn ich refresh die Bilder werden größer enter image description here

enter image description here

+1

Warum erstellen Sie nicht einfach eine wiederverwendbare Zelle in storyBoard und legen Sie alle Ihre Einschränkungen dort fest? –

+0

Mögliches Duplikat von [UITableView Höhe dynamisch ändern] (http://stackoverflow.com/questions/14223931/change-uitableview-height-dynamic) –

Antwort

0

In Ihrem Tableview Delegierte (Tableviewcontroller) sind, können Sie eine Funktion implementieren genannt heightForRowAtIndexPath

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

Sie einen Array mit allen Bildern haben Unter der Annahme, Rückgabe an diesem Index die entsprechende Höhe des Bildes in.

0

Diese Zeile in setConstraints verdächtig aussieht mir:

[self.photoImageView.heightAnchor constraintEqualToConstant:65].active = YES; 

Wenn Sie selbst Sizing Tabellenansicht Zellen verwenden, werden Sie wahrscheinlich nicht wollen, eine konstante Höhe.

Das ist ein ziemlich gutes Tutorial auf Selbst Sizing Tabellenansicht Zellen, die hilfreich sein können: https://www.raywenderlich.com/129059/self-sizing-table-view-cells

1

Gerade gesetzt Tableview Eigenschaften in viewDidLoad() -Methode

**

tableView.estimatedRowHeight = 2000; // example 
tableView.rowHeight = UITableViewAutomaticDimension; 

**

set tischansicht delegate als

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

setzten sich auch die Elemente in UITableView Zelle mit Einschränkungen von oben an Boden

für weitere Informationen zu diesem Link verweisen - https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/WorkingwithSelf-SizingTableViewCells.html

+0

Oh ich habe heightforRow nicht implementiert. Ich wusste auch nicht, dass Sie dort UITableviewAutomaticDimension zurückgeben können. Ich werde es versuchen – mparrish91

0

vollständig wurden im Zusammenhang Automatisches Layout Meine Probleme.

Zuerst musste ich den Boden der Zelle auf den unteren Bildansichten beschränken und nicht umgekehrt.

[self.contentView.bottomAnchor constraintGreaterThanOrEqualToAnchor:self.photoImageView.bottomAnchor constant:0].active = YES; 

Danach hatte ich Probleme mit der Startgröße des Imageview und der Größe nach dem Neuladen der Tabelle.

Ich legte dann feste Breite und Höhe auf der Bildansicht und das löste alle anderen Größen/Nachladen Probleme.

[self.photoImageView.heightAnchor constraintEqualToConstant:65].active = YES; 
[self.photoImageView.widthAnchor constraintEqualToConstant:65].active = YES;