【问题标题】:Change UICollectionViewCell layout on orientation在方向上更改 UICollectionViewCell 布局
【发布时间】:2016-01-11 13:05:17
【问题描述】:

我正在开发一个应用程序,其中有一个 UICollectionView。 UICollectionView 中有不同类型的 UICollectionViewCells。对于其中一个单元格,我需要针对不同的方向进行不同的布局。

在纵向视图中,单元格应具有以下布局

对于横向我需要这个布局

最好的方法是什么?此外,我还必须在 iOS 7 设备上进行这项工作。请帮忙。

谢谢

【问题讨论】:

  • 这两种布局你有两个collectionViewCells吗?
  • 现在,没有。但我可以补充一点。如何在方向上加载新布局?

标签: ios objective-c uicollectionview orientation uicollectionviewcell


【解决方案1】:

这将是我的逻辑:

为横向布局再添加一个collectionViewCell,使用不同的reuseIdentifier。

声明一个 BOOL 变量,如: BOOL isLAndscape;

在实现部分。默认布尔值为NOFalse

然后检查方向更改时的通知! 您可以在 viewDidLoad 中设置 This Thing 之类的

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(OrientationDidChange:) name:UIDeviceOrientationDidChangeNotification object:nil];

并且每当您的设备的方向发生变化时 OrientationDidChange 调用,您可以根据方向做任何您想做的事情。在您的情况下,如果方向是横向,那么 isLANDacape=YES;然后重新加载collectionView。

-(void)OrientationDidChange:(NSNotification*)notification
{
    UIDeviceOrientation Orientation=[[UIDevice currentDevice]orientation];

    if(Orientation==UIDeviceOrientationLandscapeLeft || Orientation==UIDeviceOrientationLandscapeRight)
    {
    isLAndscape=YES;
    [collectionVIew reloadData];
     }
    else if(Orientation==UIDeviceOrientationPortrait)
    {
    isLAndscape=NO;
    [collectionVIew reloadData];
    }
  }

并在collectionView的cellForItemAtIndexPath方法中,为boolislAndacape添加条件检查,并更改reuseIdentifier。

NSString *reuseIdentifier;
if(isLAndscape)
{
reuseIdentifier=@"landscapeReuseId";
}
else
{
reuseIdentifier=@"portraitReuseId";
}

就是这样!!

免责声明!!!这是我的逻辑。我没有尝试过。检查它是否有效。

【讨论】:

  • 谢谢@abhi1992。这样可行。但是在方向上重新加载 UICollectionView 是一个不错的选择吗?
  • 或者你应该在运行时添加约束以适应布局,这对我来说有点复杂的代码。我实际上不知道。重新加载collectionview是一个简单的代码而不是复杂的东西。
【解决方案2】:

您需要在横向旋转时更改 collectionViewLayout

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多