iOS:如何更改 UICollectionViewCell 的方向?

Posted

技术标签:

【中文标题】iOS:如何更改 UICollectionViewCell 的方向?【英文标题】:iOS: How can I change the orientation of a UICollectionViewCell? 【发布时间】:2012-10-09 21:12:28 【问题描述】:

我有一个UICollectionViewController,当用户转动他们的 iPad 时我会加载它,以便将其置于横向。我遇到的问题是我的UICollectionViewCells 仍在加载,就好像它是纵向的一样。我在 Interface Builder 中将UICollectionViewController 设置为横向,并且我使用了一个名为CollectionViewCell 的自定义单元格类。每个单元格只包含一个图像和一个标签。

我应该在 Interface Builder 或我的代码中做些什么吗?我尝试使用CGAffineTransformationMakeRotation,但这无济于事。如果其他人以前遇到过这种情况,我将非常感激!非常感谢!

这里有一些代码供参考:

-(void)viewDidLoad

 self.collectionView.dataSource = self;
    self.collectionView.delegate = self;


- (NSInteger)collectionView:(UICollectionView *)view numberOfItemsInSection:(NSInteger)section

    return listArray.count;


- (NSInteger)numberOfSectionsInCollectionView: (UICollectionView *)collectionView

    return 1;


- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
      
    CollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"devices" forIndexPath:indexPath];
   cell.statusImage.image=[UIImage imageNamed:@"Default.png"];
    cell.name.text=@"HEY !!!!!";
    return cell;



- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
    return CGSizeMake(320, 420);


- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section

    return UIEdgeInsetsMake(50, 20, 50, 20);


【问题讨论】:

【参考方案1】:

如果其他人遇到过这个问题,这就是我的解决方法。

我最初不允许自动旋转,而只是使用NSNotificationCenter 注册orientationChanged 通知。这很好用,只是它阻止了我的第二个视图意识到它需要在横向模式下加载。

因此,我为嵌入我的主视图的tabBar 创建了一个类,并为该类中的shouldAutoRotate 方法以及除我想以横向模式加载的一个。我仍在主视图的控制器中使用orientationChanged 通知,因为它嵌入在tabBar 中。但我只是在返回主视图时使用自动旋转。

如果有人有任何问题,请告诉我。希望对您有所帮助!

【讨论】:

我在每个单元格中使用具有动态高度的自定义 UICollectionView。但是当我旋转时,我的单元格不会通过 columnWidthForCollectionView 方法更改宽度,也不会通过 maximumNumberOfColumnsForCollectionView 方法更改列数。我正在动态计算我的列宽。通过 -(CGFloat)getCollumnWidth CGFloat 宽度 = (self.view.frame.size.width-(kCollectionCellBorderRight*3))/2;返回宽度; 这在 iPhone 和 iPad 中都会发生。

以上是关于iOS:如何更改 UICollectionViewCell 的方向?的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionview 在滚动时更改选择/禁用选择 - iOS

UICollectionView.reloadData() 更改单元格顺序 | iOS 斯威夫特

iOS - 更改 UICollectionView 布局以填充行而不是列

设备方向更改时如何更改 UiCollectionView 单元格大小?

定期更改 UICollectionView 单元格图像

如何更改 UICollectionView 插座的高度?