2013-06-03 4 views
-1

Я использую GMGridView в моем проекте. И в методе - (GMGridViewCell *)GMGridView:(GMGridView *)gridView cellForItemAtIndex:(NSInteger)index я пишу фрагмент, который из моего ожидания. Фрагмент кода выглядит следующим образом:Что случилось с этим назначением?

if (!cell) 
    { 
     cell = [[GMGridViewCell alloc] init]; 

     ThumbImageView *view = [[ThumbImageView alloc] initWithFrame:CGRectMake(0, 0, size.width, size.height)]; 
     [view setBackgroundColor:DEFAULT_BACKGROUND_COLOR]; 
     [view setImage:[UIImage imageWithContentsOfFile:path]]; 
     view.userInteractionEnabled = YES; 
     view.layer.shadowOffset = CGSizeMake(8, 8); 
     view.layer.shadowOpacity = 0.5; 
     NSLog(@"view frame width:%f,height:%f",view.frame.size.width,view.frame.size.height); 
     cell.contentView = view; 
     NSLog(@"cell.contentView frame width:%f,height:%f",cell.contentView.frame.size.width,cell.contentView.frame.size.height); 
    } 

, когда он работает выход следующим образом:

2013-06-03 11:02:05.508 XXX[71692:707] view frame width:115.000000,height:180.000000 
2013-06-03 11:02:05.511 XXX[71692:707] cell.contentView frame width:0.000000,height:0.000000 

почему правопреемником вид на cell.contentView, cell.contentView.frame.size все равно нулю? а также cell.contentView может отображать изображение правильно. в чем причина? Я полностью спутать :(

ответ

0

Проблема, вероятно, в том, что вы создали новые представления, и вы смотрите на кадр одного из этих представлений до того, как цикл выполнения достигнет своей фазы компоновки.

При создании GMGridViewCell, он начинается с по умолчанию frame и bounds из CGRectZero. Когда вы устанавливаете свой контент, он устанавливает frame в его содержимое (ячейку) bounds. Поэтому, даже если вы настроили кадр представления контента напрямую с помощью initWithFrame:, рамка будет изменена на CGRectZero, когда вы установите представление в качестве содержимого содержимого ячейки.

Поскольку ячейка не является подвидью вида сетки, нет способа запросить вид сетки, чтобы выложить ячейку к тому времени, когда вы пытаетесь зарегистрировать кадр представления контента. Если вид сетки использует постоянный размер для всех ячеек, и вы знаете, что это за размер, вы можете вручную установить ячейку этого размера, прежде чем устанавливать представление содержимого ячейки. В противном случае вам нужно подождать, пока не будет запущен метод сетки layoutSubviews для проверки рамки представления контента.

+0

Ваш ответ разумный. Благодарю. – chancyWu

2

Проверить the docs:..

contentView

Возвращает представление содержимого объекта ячейки (только чтение)

@property(nonatomic, readonly, retain) UIView *contentView

contentView - это свойство readonly. Вы не можете назначить его.

+1

Я вижу, но я использую GMGridView, в моем GMGridViewCell contentView похож на этот @property (неатомный, сильный) ThumbImageView * contentView; – chancyWu

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