Изменение размера содержимого UITableViewCell автоматически - PullRequest
13 голосов
/ 29 июля 2010

У меня есть код, который создает ячейку таблицы с ползунком. Это довольно просто и хорошо подходит для iPhone. Я немного анонимизировал это здесь:

UITableViewCell* cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Foo"] autorelease];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
CGRect contentViewFrame = cell.contentView.frame;
CGRect sliderFrame = CGRectMake(10, 0, 280, contentViewFrame.size.height);
UISlider* slider = [[UISlider alloc] initWithFrame:sliderFrame];
UIImage* minimumImage = [UIImage imageNamed:@"min.png"];
UIImage* maximumImage = [UIImage imageNamed:@"max.png"];
slider.minimumValueImage = minimumImage;
slider.maximumValueImage = maximumImage;
slider.value = 0.5f;
[slider addTarget:self action:@selector(sliderAction:) forControlEvents:UIControlEventValueChanged];
[cell.contentView addSubview:slider];
[slider release];

Конечно, это неправильный размер для iPad. Поэтому моей первой мыслью было установить для свойства autoresizingMask значение UIViewAutoresizingFlexibleWidth. Проблема решена, верно? Нету. Теперь на iPhone ширина содержимого слайдер-плюс-изображения меньше 280, и поэтому он не подходит к концу - его длина составляет около 20 пикселей.

На iPad то же самое - ширина UISlider автоматически изменяет размер примерно до 20 пикселей до конца ячейки.

Возможно, флаг автоматического изменения размера обращает внимание на несуществующую accessoryView ячейки? Я попытался явно установить nil, но я думаю, что по умолчанию nil, поэтому ничего не изменилось.

Я бы хотел, чтобы размер содержимого этой ячейки автоматически изменялся на «полную» ширину ячейки независимо от устройства и ориентации. Есть ли простой способ сделать это?

Ответы [ 4 ]

10 голосов
/ 24 августа 2010

Работает именно так, как вы описали.Я склонен думать, что это ошибка iOS.На iPAD, когда вы создаете новый UITableViewCell, его ширина устанавливается на 320. жестко закодировано (!) Как view, так и contentView.Размер не изменяется должным образом, если установлено значение UIViewAutoresizingFlexibleWidth.Я установил его на view.frame.size.width / 2 с забавными результатами: на iPhone это 160, на iPad это 608 !!!

В итоге я вручную изменил размеры своих ячеек и их содержимого.

6 голосов
/ 15 февраля 2012

Немного поздно, но сегодня я нашел решение того же вопроса, но вам нужно создать пользовательский UITableViewCell.Затем вы можете переписать функцию

- (void) layoutSubviews
{
    [dateLabel setFrame:CGRectMake(10.f, 16.f, 80.f, 12.f)];
    [textLabel setFrame:CGRectMake(106.f, 16.f, contentView.frame.size.width-105.f + 1.f, 12.f)];
}

. В этой функции актуальным является self.frame.size.width.
И это также работает с вращением устройства.

3 голосов
/ 18 октября 2013

Установите contentMode для вашей клетки на UIViewContentModeRedraw.

3 голосов
/ 29 июля 2010

Вы должны быть в состоянии указать системе изменения размера «придерживаться» объект на фиксированном расстоянии от правого края (где он недостаточно изменяет размеры). Если вы экспериментируете с IB, вы можете создать вид с изменением ширины и фиксированным с правой стороны.

У вас также есть UIViewAutoresizingF flexRightMargin?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...