У меня есть особая ситуация, с которой мне нужна помощь.У меня есть CustomView, который я помещаю в каждый UITableViewCell в моем UITableView.Никаких проблем там нет.
В моем CustomView есть UILabel, которая отображает некоторый текст, переданный ему.В зависимости от длины текста ширина CustomView увеличивается / уменьшается.Все в порядке.
Проблема, с которой я столкнулся, связана с подуровнем в моем CustomView, который является градиентом (CAGradientLayer).Размер градиента не будет увеличиваться / уменьшаться на экране не видимых ячеек.
Позвольте мне показать вам некоторый код ... Я создаю свой CustomView примерно так:
- (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];
CustomView *custom = [[CustomView alloc] init];
custom.tag = 777;
[cell.contentView addSubview:custom];
[custom release];
}
}
На этом этапе я не запускаю initWithFrame, поскольку ячейка может быть повторно использована, а ширина всегданеправильно.Как только ячейка окажется там, я вызываю метод configureCell: где я делаю следующее:
CGSize teamMaxSize = CGSizeMake(300, 18);
CGSize teamNewSize = [[managedObject valueForKey:@"category"]
sizeWithFont:[UIFont systemFontOfSize:kFontSizeTeam]
constrainedToSize:teamMaxSize
lineBreakMode:UILineBreakModeWordWrap];
CustomView *lozenge = (CustomView *) [cell.contentView viewWithTag:777];
lozenge.frame = CGRectMake(10, 5, teamNewSize.width+12, 18);
[lozenge resetSize];
[lozenge setLabel:[managedObject valueForKey:@"category"]];
Это прекрасно работает, ширина моего CustomView настраивается в соответствии с длиной ключа «category».ResetSize;описанный выше метод просто изменяет размер UILabel, который я упоминал ранее, до нового фрейма CustomView, прежде чем заполнить его значением.
В любом случае, вернемся к моей проблеме.Я создаю фоновый градиент в drawRect: метод моего CustomView.Работает нормально, однако размер CustomView у init.После того, как я изменил размер, мне нужно изменить размер градиента.Итак, я попытался добавить
gradient.frame = self.bounds
, когда я вызываю resetSize в моем вышеупомянутом коде.Однако при прокрутке UITableView я вижу градиент, буквально заполняющий слева направо, когда он загружается в поле зрения.Могу ли я в любом случае сделать так, чтобы это происходило «за кадром», поэтому CustomView заполняется градиентом, как только он появляется?