Можно ли установить фиксированную ширину на UIImageView внутри UITableViewCell? - PullRequest
0 голосов
/ 11 февраля 2010

У меня есть UITableView, в котором, конечно, я использую некоторые UITableViewCells. Теперь в некоторых ячейках есть значок / изображение, которое я хочу отобразить перед текстом, а в некоторых других нет. Я не создавал UITableViewCells в Интерфейсном Разработчике, просто использовал материал по умолчанию:

// Настройка внешнего вида ячеек табличного представления. - (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}

// Set up the cell...
switch (indexPath.row) {
    case 0:
        cell.textLabel.text = @"Nearby";
        cell.imageView.image = [UIImage imageNamed:@"marker.png"];
        break;
    case 1:
        cell.textLabel.text = @"Bookmarked";            
        cell.imageView.image = [UIImage imageNamed:@"bookmark.png"];
        break;
    case 2:
        cell.textLabel.text = @"Other";
        break;
    default:
        break;
}

return cell;

}

Кажется, это работает отлично, но у меня есть небольшая проблема с шириной cell.imageView. Иконки, которые я использую, имеют разную ширину. У некоторых 21 пиксель, у других 25 пикселей, а в некоторых приведениях у меня вообще нет иконки.

В результате текст textLabel будет отображаться в разных позициях (в зависимости от ширины imageView).

Теперь мой вопрос: могу ли я добавить какой-нибудь код / ​​оператор, который будет гарантировать, что imageView моей ячейки всегда имеет ширину 30 пикселей? Даже если для этого изображения нет изображения?

Может ли это быть сделано программно или мне придется создать пользовательскую ячейку в InterfaceBuilder или даже создать собственного потомка UITableViewCell.

Любая информация по этой теме приветствуется.

С уважением,

Stefaan

Ответы [ 2 ]

1 голос
/ 11 февраля 2010

Свойство imageView в ячейке таблицы доступно только для чтения, однако свойства imageView такие же, как и обычно, поэтому вы можете манипулировать его шириной через свойство frame.

Я почти уверен, что установка ширины пустого imageView не поможет. Я считаю, что если imageView не содержит изображение, ячейка таблицы не добавляет его в качестве подпредставления ...

В ячейках, в которых нет изображения, вы можете попробовать установить фрейм textLabel так, чтобы он находился там, где были бы другие textLabels, если бы присутствовали изображения? Помните, что если вы сделаете это, вам также придется сократить ширину textLabels.

0 голосов
/ 11 февраля 2010

Немного проще, но хакерский способ:

1) Убедитесь, что ваши изображения имеют одинаковую ширину. Используйте графический редактор, например, Acorn, чтобы дополнить изображения прозрачной областью.

2) Создайте прозрачный .png 30 (или любой другой) пикселей в ширину. Установите это как изображение в строках без значка.

3) Нет третьего шага!

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