Я использую следующий код, чтобы собрать UITableView. Высота ячейки позволяет показывать первые три строки в таблице без прокрутки. Все в порядке с этими первыми тремя рядами. Но как только я прокручиваю вниз по сравнению с первоначальными первыми тремя строками, изображение в myImage наследует ширину ячеек в первых трех строках и не изменяет размер в соответствии со значением, извлеченным из массива на основе indexPath.row.Динамическое изменение ширины UIImage в ячейке UITableView в Xcode
Ячейка, очевидно, повторно используется из инструкции else из первоначально окрашенных ячеек, но мне нужно выяснить способ, чтобы ширина myImage изменялась для каждой строки.
Любая помощь очень ценится! LQ
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
const NSInteger LABEL_TAG = 1001;
const NSInteger IMAGE_TAG = 1002;
UILabel *myLabel;
UIImageView *myImage;
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [myTableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
// Create the cell
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero
reuseIdentifier:CellIdentifier]
autorelease];
// Constant values
const CGFloat LABEL_HEIGHT = 20;
const CGFloat LABEL_WIDTH = 140;
const CGFloat LABEL_INDENT = 1;
const CGFloat LABEL_TOP = 0.065 * myTableView.rowHeight;
// Create the label;
myLabel = [[[UILabel alloc] initWithFrame:
CGRectMake(
LABEL_INDENT,
LABEL_TOP + LABEL_HEIGHT,
LABEL_WIDTH,
LABEL_HEIGHT)]
autorelease];
[cell.contentView addSubview:myLabel];
// Configure the label
myLabel.tag = LABEL_TAG;
myLabel.backgroundColor = [UIColor clearColor];
myLabel.textColor = [UIColor blueColor];
myLabel.font = [UIFont systemFontOfSize:[UIFont labelFontSize] - 3];
myLabel.textAlignment = UITextAlignmentRight;
// Create the image (NOTE: THIS IS THE PROBLEMATIC PART)
// Extract the width for the image based on an array value for each row:
int xValue = [[myArray objectAtIndex:(indexPath.row)]intValue];
float xLength = (float)xValue/100;
myImage = [[[UIImageView alloc] initWithFrame:
CGRectMake(
LABEL_INDENT + 53, // This places the image to the right of the label
LABEL_TOP + LABEL_HEIGHT,
xLength * LABEL_WIDTH,
// Это где ширина каждой строки регулируется LABEL_HEIGHT] autorelease];
[cell.contentView addSubview:myImage];
myImage.contentMode = UIViewContentModeLeft;
myImage.image = [UIImage imageNamed:@"ProgressBar.png"];
myImage.clipsToBounds = YES;
} else {
// Re-use cells
myLabel = (UILabel *)[cell viewWithTag:LABEL_TAG];
myImage = (UIImageView *)[cell viewWithTag:IMAGE_TAG];
}
return cell;
}
Благодарим вас за ваш быстрый ответ и заставим меня преодолеть этот барьер. Я только что перестроил его после вашего примера, и он отлично работает. Вот дополнительный элемент для тех, кто еще ищет решение этого типа элемента дизайна: ... // Deal Метки Текста в ячейке: [(UILabel *) [клетка viewWithTag: SETTINGS_LABEL] SetText: @» Настройки ... "]; // Сделка с переменной шириной изображения в Cell: [(UIImageView *) [клетка viewWithTag: IMAGE_TAG] setFrame: CGRectMake ( (0.0f, 15.0f, xLength * LABEL_WIDTH, 20.0f)];. –
Вы можете Рассматривайте помечая вопрос как ответ;) – RickiG
Когда вы 'alloc'' переменную' background', вы пропускаете память. –