2014-07-31 4 views
1

Так что я создаю UISegmentedControl, который я помещаю в дополнительное представление для коллекции. Затем я использую этот сегментированный элемент управления через делегат на нем IBAction, чтобы установить свойство типа BOOL на моем UICollectionViewController, которое соответствующим образом изменяет данные, отправляемые из одного потока в другой. Кажется, что все это работает, так как когда я нажимаю вторую вкладку после загрузки представления коллекции (которая загружается с выбранной первой вкладкой и правильных данных для первой вкладки), появляются правильные данные, но мой дополнительный вид исчезает !UICollectionView скрывает мой дополнительный взгляд, почему?

Что странно это:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section 

Этот метод правильно называют, и я правильно устанавливая размер моего дополнительного зрения, и я могу видеть это в моем тренажере, так как мои данные компенсировано размер моего дополнительного взгляда. Что не вызывается, однако, этот метод:

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath 

Этот метод вызывается только когда мой взгляд коллекция загружена, таким образом, загрузки исходного сегментированный контроллера, но никогда не вызывается снова, даже если я звоню reloadData на метод collectionView и метод размера, упомянутый выше, вызываются снова.

Теперь, чтобы добавить еще один поворот, я прошел и поставить точку останова в одном из методов перезагрузки вида сбора, и сделал:

po [self.view recursiveDescription] 

В отладчике, чтобы узнать, если мой сегментированный вид контроллера все еще там, и это! Она имеет свой скрытый флаг установлен в YES, хотя ...

baseClass = UICollectionReusableView; frame = (0 0; 320 55); hidden = YES; layer = <CALayer: 0xef4bd30> 

Как получить эту точку зрения, чтобы не быть скрыты, когда только ссылка у меня есть к нему в методе, называемом:

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath 

и этот метод даже не называется этим вторым временем?

ответ

2

Так что ответ должен быть связан с FlowLayouts, и я не правильно настраивал мое. Я действительно получаю размер для моего дополнительного заголовка, но я не придав ему атрибуты метода:

- (UICollectionViewLayoutAttributes *)layoutAttributesForSupplementaryViewOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath 

Что называется только тогда, когда вы добавляете дополнительный вид на массив атрибутов в:

- (NSArray *) layoutAttributesForElementsInRect:(CGRect)rect 

Как только я добавил атрибут для дополнительного вида вида UICollectionElementKindSectionHeader, и был вызван метод макета, часть моих проблем была уменьшена.

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

So to summary: Убедитесь, что вы используете методы UICollectionViewFlowLayout! И убедитесь, что у вас нет встречных путей указателей, которые удаляют ваши атрибуты из массива атрибутов.

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