2014-10-28 3 views
11

Oto fragment koduDlaczego systemLayoutSizeFittingSize zwraca (0, 0) dla 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)); 
    }]; 

W kontrolerze widoku, który używa 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; 
} 

to zawsze zwraca 1.f. Proszę o pomoc i nie jestem pewien, co robię źle tutaj.

Odpowiedz

26

Problem polega na tym, że ograniczenia nie są determinujące wysokości komórki. Nie podpięłosz górnej części widoku obrazu ani dolnej części widoku obrazu do jego superview (contentView). Tak więc komórka nie ma nic wewnętrznego, co uniemożliwiłoby jej zapadanie się aż do zera, jak to bywa, gdy zadzwonisz pod numer systemLayoutSizeFittingSize.

Innymi słowy: sposób, w jaki działa systemLayoutSizeFittingSize, polega na traktowaniu wewnętrznych ograniczeń czegoś jako rozpór, które nadają mu minimalny (lub maksymalny) rozmiar. Nie masz rozpórek.

+0

To miało wiele sensu. Ale nadal nie działa :(. Dodałem to: make.top.equalTo (@ 0); – mobjug

+0

Uh-huh. Czy przeczytałeś to, co powiedziałem? Musisz _powinąć_najlepsze _i_ dół widoku obrazu _do treści view_. Nie zrobiłeś tego Nie mogę ci pomóc, jeśli nie słuchasz – matt

+0

OK Opuściłem dno Dziękuję – mobjug