在单个 UICollectionView 和 UIView 中使用布局组合

Using a combination of layouts in a single UICollectionView and UIViews

我正在开发一个简单的应用程序,向用户显示 UITableViewController 种语言。当他们点击任何语言时,他们将被带到一个带有嵌入式 UICollectionView 的 UIViewController。这个组件是在 Interface Builder 中设计的,我在这里自定义了一个可重用的 UICollectionViewCell。我这样做的原因是因为我可以即时确定要显示多少 UICollectionViewCells

看起来像这样:

灰色框是UICollectionViewCell。所以这按我预期的那样工作,因为如果我点击 Language English,它会显示三个 UICollectionViewCells,如果我点击 French,它会显示一个。

现在,UICollectionViewCells 的大小都相同,这是有道理的,因为它们显示的是不同的图像。

我想实现的基本上是两个部分。第一部分是上图中尺寸的 UICollectionViewCells,第二部分更小 UICollectionViewCells.

如何在界面生成器中实现这一点?我看不到部分的选项,就像您在 UITableViewController 设置中看到的那样。

因为我使用的 UICollectionViewCell 横跨图像的宽度,也许我可以只使用 UITableViewController 每个单元格的自定义高度,然后有部分?

我不确定在此处采取的正确方法,如有任何指导,我们将不胜感激。

在您的 viewcontroller 代码中使用委托非常容易实现。 您仍然可以在界面生成器中创建单元格,但将 UITableview 委托连接到您的 viewcontroller class 并相应地使用这些方法

    - (CGSize)collectionView:(UICollectionView *)collectionView
                  layout:(UICollectionViewLayout *)collectionViewLayout
  sizeForItemAtIndexPath:(NSIndexPath *)indexPath

如果您有动态内容,您的视图控制器可能知道您想要在这些单元格中显示的数据。在这种情况下,我将创建一个方法来根据内容确定单元格的大小。

看起来应该接近那个

- (CGSize)collectionView:(UICollectionView *)collectionView
                      layout:(UICollectionViewLayout *)collectionViewLayout
      sizeForItemAtIndexPath:(NSIndexPath *)indexPath {

   NSString *myContent = [self contentWithIndex:indexPath];
   CGSize size = [self sizeForContent:myContent];
   return size;


}