Ich versuche, eine dynamische UITableView
zu erstellen, wo eine cell
erweitern/reduzieren kann, wie der Benutzer die cell
auswählt.Das Ausblenden eines UILabel von einer UITableViewCell ändert nicht die Größe der contentView
- (void)setUpCell:(DynamicTableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {
cell.label.text = [self.dataSource objectAtIndex:indexPath.row];
cell.secondLabel.text = [self.dataSource objectAtIndex:self.dataSource.count - indexPath.row - 1];
if ([self.isVisible[indexPath.row] isEqual:@NO]) {
cell.secondLabel.hidden = YES;
} else {
cell.secondLabel.hidden = NO;
}
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.dataSource.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
DynamicTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
[self setUpCell:cell atIndexPath:indexPath];
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
DynamicTableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if ([self.isVisible[indexPath.row] isEqual: @YES]) {
self.isVisible[indexPath.row] = @NO;
cell.secondLabel.hidden = YES;
} else {
self.isVisible[indexPath.row] = @YES;
cell.secondLabel.hidden = NO;
}
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
static DynamicTableViewCell *cell = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
});
[self setUpCell:cell atIndexPath:indexPath];
return [self calculateHeightForConfiguredSizingCell:cell];
}
- (CGFloat)calculateHeightForConfiguredSizingCell:(DynamicTableViewCell *)sizingCell {
[sizingCell layoutIfNeeded];
CGSize size = [sizingCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
return size.height;
}
gegabelt ich this Projekt und haben den Testcode here.
Sobald die Größe der Zelle geändert wurde, ändert sie sich nicht, wenn die Zelle ausgewählt wird, nur der Inhalt der Zelle wird ausgeblendet. Ich habe versucht, die explizite Größenberechnung durch UITableViewAutomaticDimension
zu ersetzen. Habe auch versucht, die Zelle neu zu laden. Scheint, sobald die Zellengröße berechnet wurde, ändert es sich nicht.
Alle Vorschläge, was zu versuchen wäre sehr dankbar!
Danke! Dies endete mit ein paar zusätzlichen Änderungen, um die variable Höhe des UILabel zu gewährleisten. –
Nice Philip, froh zu helfen! Ich nehme an, Sie haben etwas Erfahrung mit Android? Denn in Android können Sie view.setVisibility (View.GONE); und dann wird diese Ansicht "zusammenbrechen". In iOS ist es etwas kniffliger. Autolayout ist der Weg zu gehen :) – Sajjon