2012-05-21 2 views
2

У меня возникли трудности с настройкой selectedBackgroundView для UITableViewCell в методе cellForRowAtIndexPath. Я попробовал несколько вариантов кода ...UITableViewCell setSelectedBackground не правильно отображает фрейм

CGRect customFrame = CGRectMake(cell.frame.origin.x + 1.0f, cell.frame.origin.y, 
cell.frame.size.width - 22.0f, cell.frame.size.height); 

UIView *cellBackground = [[[UIView alloc] initWithFrame:customFrame] autorelease]; 
cellBackground.backgroundColor = [UIColor colorWith8BitRed:0 green:0 blue:0 alpha:0.1f]; 
cell.selectedBackgroundView = cellBackground; 

С помощью этого фрагмента кода, ячейка имеет правильное изменение цвета, но размеры рамы не то, что я указал (они, кажется, размеры cell.frame даже хотя я указал представление для инициализации с помощью моего customFrame)

Я пробовал еще один подход: создание родительского представления с дочерним подвью. Рамка родительского представления - это те же размеры, что и ячейка, а кадр дочернего поднабора содержит мои собственные размеры рамки. Когда я устанавливаю родительское представление как backgroundView, меняются размеры рамки рамки. Однако, когда я пытаюсь установить родительское представление как selectedBackgroundView, я не вижу представления при выборе ячейки.

CGRect customFrame = CGRectMake(cell.frame.origin.x + 1.0f, cell.frame.origin.y, 
cell.frame.size.width - 22.0f, cell.frame.size.height); 

UIView *parentView = [[[UIView alloc] initWithFrame:cell.frame] autorelease]; 
UIView *childView = [[[UIView alloc] initWithFrame: customFrame] autorelease]; 

[parentView addSubview:childView]; 
childView.backgroundColor = [UIColor colorWith8BitRed:0 green:0 blue:0 alpha:0.1f]; 
cell.selectedBackgroundView = parentView; 

Кажется довольно сложным настроить размеры рамки selectedBackgroundView. Любая помощь будет оценена по достоинству. Благодаря!

ответ

12

Вам нужно это в пользовательских TableViewCell

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 
    self.selectedBackgroundView.frame = CGRectMake(cell.frame.origin.x + 1.0f, cell.frame.origin.y, cell.frame.size.width - 22.0f, cell.frame.size.height); 
} 

мне пришлось почесать голову. Это глупо, потому что так или иначе вам нужно в два раза больше кадра. Конечно, вы можете использовать define или даже свойство самого UIView, но все-таки ...

я только мог найти, что благодаря Ortwin Gentz ​​ - Реквизит к нему!

+0

действительно хорошая работа! –

+0

Спасибо, много. Я часами царапаю голову, пытаясь это исправить. – Henning

Смежные вопросы