2014-10-28 4 views
11

Ecco il frammento di codicePerché systemLayoutSizeFittingSize restituisce (0, 0) per UITableViewCell?

self.xyzIcon = [UIImage mobileImageNamed:@"icon_xyz"]; 
    self.xyzIconImageView = [UIImageView new]; 
    [self.contentView addSubview:self.xyzIconImageView]; 

    [self.xyzIconImageView mas_makeConstraints:^(MASConstraintMaker *make) { 
     make.left.equalTo(weakSelf.contentView.mas_left); 
     make.width.equalTo(@(weakSelf.xyzIcon.size.width)); 
     make.height.equalTo(@(weakSelf.xyzIcon.size.height)); 
    }]; 

Nel controller della vista, che utilizza Tableview

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (!self.prototypeCell) { 
     self.prototypeCell = [UITableViewCell new]; 
    } 

    [self.prototypeCell configure]; 

    CGFloat heightCalculated = [self.prototypeCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height + 1.f; 

    NSLog(@"Height calculated %f", heightCalculated); 

    returns heightCalculated; 
} 

Questa restituisce sempre 1.f. Per favore aiuto e non sono sicuro di cosa sto facendo male qui.

risposta

26

Il problema è che i vincoli non determinano l'altezza della cella. Non è stata bloccata la parte superiore della vista dell'immagine o la parte inferiore della vista dell'immagine nella sua superview (contentView). Quindi la cella non ha nulla di interno da impedirle di collassare fino a zero, per così dire, quando chiami systemLayoutSizeFittingSize.

Per dirla in un altro modo: il modo in cui funziona systemLayoutSizeFittingSize consiste nel trattare i vincoli interni di qualcosa come puntoni che gli danno una dimensione minima (o massima). Non hai puntoni.

+0

Questo ha molto senso. Ma ancora non funziona :(. Ho aggiunto questo: make.top.equalTo (@ 0); – mobjug

+0

Uh-huh. Hai letto quello che ho detto? Devi _pin_ il primo e il fondo della vista dell'immagine _al contenuto view_. Non l'hai fatto. Non posso aiutarti se non ascolti. – matt

+0

OK Avevo perso il fondo. Grazie – mobjug