2016-11-08 6 views
1

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

//set minimum spacing 
if(UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation)){ 

    layout.minimumLineSpacing = 100.0f; 
} 
else{ 

    layout.minimumLineSpacing = 40.0f; 
} 

Но, к сожалению, он не меняется, когда я переключаюсь с портрета на пейзаж. Может ли кто-нибудь сказать мне, как я могу это достичь?

+0

Вы должны перезагрузить свой вид коллекции, если вы хотите вызовите метод сбора данных или делегата метода сбора данных – Rajat

+0

Это должно ответить на ваш вопрос: [http://stackoverflow.com/questions/18988028/how-do-i-define-the-size-of-a-collectionview-on-rotate ] (http://stackoverflow.com/questions/18988028/how-do-i-define-the-size-of-a-collectionview-on-rotate) –

+0

Проблема заключается не в размерах ячеек, а в расстоянии, когда его в ландшафтном представлении. Мне нужно, чтобы каждая ячейка была одна, а затем выгружалась, чтобы перейти к следующей ячейке –

ответ

0

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

-(CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*) 
collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section{ 

if(UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation)){ 

    NSLog(@"Changed to landscape Spacing"); 
    return 100.0f; 
} 
else{ 

    return 40.0f; 
} 

} 

Спасибо за помощь, ребята, ваш вклад помог мне найти солитона, иногда обсуждая проблему с кем-то помогает мне думать

+0

вам не следует использовать оба layout.minimumLineSpacing и collectionView: вызов делегата макета. Он перезапишет более старый. – kaushal

+0

Итак, вы имеете в виду вывести строку 'layout.minimumLineSpacing = 40.0f' в функцию' loadView'? Я сделал это, прежде чем добавлять новую функцию –

0

Попробуйте

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
{ 
    [yourcollectionView performBatchUpdates:nil completion:nil]; 
} 
+0

:/... Я должен был упомянуть, что я уже называю эту функцию. Я использую его, когда меняю размер моих ячеек. Вышеприведенный код не имеет своей функции, а в вызываемой функции. '- (void) loadView' должен ли я иметь' layout.minimumLineSpacing' в своей собственной функции, которая возвращает минимальный интервал? –

+0

Это для перезагрузки вашего вида коллекции во время ориентации. – KKRocks

+0

Да, я понимаю. Когда я вращаю устройство, мои ** Ячейки ** в моем ** CollectionView ** изменяются в размере, но не ** Интервале **. возможно, я должен попытаться переместить код в свою собственную функцию, которая возвращает межстрочный интервал? –

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