Я использую представление таблицы, которое использует пользовательский подкласс UITableViewCell, NoteCell
. Подкласс имеет две текстовые метки, метку имени и метку даты, которые находятся рядом друг с другом в ячейке. Моя цель состоит в том, чтобы изменить метку имени, чтобы показать полную дату независимо от того, что.Как вы динамически изменяете ширину двух текстовых меток внутри UITableViewCell?
in cellForRowAtIndexPath, я пытаюсь вычислить и установить ширины двух текстовых представлений, чтобы дата была полностью отображена, а метка названия усечена.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"NoteCell";
NoteCell *cell = (NoteCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
// Configure the cell...
cell.dateLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin;
cell.nameLabel.text = @"A name that should be truncated";
cell.dateLabel.text = @"A long date to use as an example";
// Set the widths
// First calculate how wide the date label needs to be.
cell.dateLabel.text = @"A really long date";
CGSize dateLabelSize = [cell.dateLabel.text sizeWithFont:cell.dateLabel.font];
CGFloat dateExpansionAmount = fabsf(dateLabelSize.width - cell.dateLabel.frame.size.width) + 10.0f;
cell.dateLabel.frame = CGRectMake(cell.dateLabel.frame.origin.x - dateExpansionAmount,
cell.dateLabel.frame.origin.y,
dateLabelSize.width,
cell.dateLabel.frame.size.height);
CGFloat nameLabelWidth = cell.dateLabel.frame.origin.x - cell.nameLabel.frame.origin.x;
cell.nameLabel.frame = CGRectMake(cell.nameLabel.frame.origin.x,
cell.nameLabel.frame.origin.y,
nameLabelWidth,
cell.nameLabel.frame.size.height);
}
К сожалению, результаты не верны, потому что я не думаю, что правильно устанавливаю/вычисляю рамки рамки. См. Изображение ниже.
Игнорирование проблемы с расчетами кадров есть лучший способ подойти к этой проблеме или вручную позиционирование текста метка кадра единственному пути?
Вы уже пытались установить свойство autoResize на указанный ярлык? –
Вы имеете в виду настройку свойств авторезистирования, т.е. распорок и пружин? - если да, то это изменит размеры ярлыков для расширения или сжимания при повороте устройства. –
Вы правильно настроили маску изменения метки даты, но не метку имени. Он должен иметь гибкую ширину и фиксированный правый край. – sosborn