Dynamiczna wysokość komórki UITableView z funkcją AutoLayout z dynamicznymi etykietami typów

Zaimplementowałem moje komórki tableview za pomocą funkcji AutoLayout, aby wyświetlić obraz i 2 etykiety, używając dynamicznego typu dla adaptacyjnego rozmiaru czcionki.

Zaimplementowałem estimateHeightForRowAtIndexPath, co ma doskonały sens i jest łatwe w użyciu.

Nie używam budowniczego interfejsu dla komórek. Zamiast tego używam masonerii, co nie powinno mieć znaczenia.

Obecnie walczę z obliczeniem rzeczywistej wysokości komórki. Ręczne obliczanie to ból i trudny do utrzymania przy aktualizacji kodu automatycznego układu.

Znalazłem odpowiedź StackOverFlow:Korzystanie z Auto Layout w UITableView dla dynamicznych układów komórek i zmiennych wysokości rzędów To rozwiązanie powinno również zadbać o różne rozmiary czcionek, ale nie działa dla mnie.

Kiedy mam taki system AutoLayout: UILabel do góry contentView z dopełnieniem, inny UILabel do dołu contentView z dopełnieniem, powinien automatycznie obliczyć wysokość komórki.

Ale zamiast tego powoduje następujący konflikt AutoLayout:

UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<MASLayoutConstraint:0xc506be0 UIImageView:0xc5070a0.height == 150>",
    "<MASLayoutConstraint:0xc506d90 UIImageView:0xc5070a0.top == UITableViewCellContentView:0xc5076e0.top + 10>",
    "<MASLayoutConstraint:0xc506990 UILabel:0xc507450.top == UIImageView:0xc5070a0.bottom + 10>",
    "<MASLayoutConstraint:0xc506630 UILabel:0xc507260.top == UILabel:0xc507450.bottom>",
    "<MASLayoutConstraint:0xc506530 UILabel:0xc507260.bottom == UITableViewCellContentView:0xc5076e0.bottom>",
    "<NSAutoresizingMaskLayoutConstraint:0xc3d05a0 UITableViewCellContentView:0xc5076e0.height == 44>"
)

Używam następującego kodu AutoLayout:

[self.subtitleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
            make.top.equalTo(self.titleLabel.mas_bottom);
            make.right.equalTo(self.contentView.mas_right).with.offset(-GCBaconCellRowPadding);
            make.left.equalTo(self.contentView.mas_left).with.offset(GCBaconCellRowPadding);
            make.bottom.equalTo(self.contentView.mas_bottom);
        }];

Ostatnia linia powinna wskazywać, że wysokość komórki się rozszerza.

Patrząc na wynik konfliktu AutoLayout, wygląda na to, że chce on ustawić wysokość automatycznie na 44.0, co jest wartością domyślną.

Edytować: Ustawianie contentView's tłumaczyAutoresizingMaskIntoConstraints na NO

self.contentView.translatesAutoresizingMaskIntoConstraints = NO;

podczas tworzenia komórki naprawia kolizję, ale uzyskuje zerową wysokość wiersza.

questionAnswers(1)

yourAnswerToTheQuestion