当前位置: 首页 > 面试题库 >

UICollectionView-调整设备上单元格的大小旋转-Swift

齐博厚
2023-03-14
问题内容

我创建了一个UICollectionView,以便可以将视图排列成整齐的列。我希望在宽度大于500像素的设备上有一列。

为了实现这一点,我创建了以下功能:

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
    let size = collectionView.frame.width
    if (size > 500) {
        return CGSize(width: (size/2) - 8, height: (size/2) - 8)
    }
    return CGSize(width: size, height: size)
}

这在第一次加载时可以按预期工作,但是当我旋转设备时,计算并不总是再次发生,并且视图也不一定总是按预期重绘。这是设备旋转时的代码:

override func willRotateToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) {
    collectionView.collectionViewLayout.invalidateLayout()
    self.view.setNeedsDisplay()
}

我假设我忘记重画了一些东西,但是我不确定是什么。非常感谢任何想法!


问题答案:

您可以使用viewWillLayoutSubviews。这个问题应该会有所帮助,但是只要视图控制器视图将要布局其子视图,就可以大声地称呼它。

因此您的代码将如下所示:

override func viewWillLayoutSubviews() {
  super.viewWillLayoutSubviews()

  guard let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout else {
    return
  }

  if UIInterfaceOrientationIsLandscape(UIApplication.sharedApplication().statusBarOrientation) {
    //here you can do the logic for the cell size if phone is in landscape
  } else {
    //logic if not landscape 
  }

  flowLayout.invalidateLayout()
}


 类似资料:
  • 在JavaFX中使用setRotate()旋转节点(GridPane)后,我对节点(GridPane)的方向有问题。当我旋转节点并将其放入GridPane的一个单元格中时,我希望旋转后的节点适合单元格内部,并随单元格一起调整大小。我添加了一些示例代码,向您展示我希望得到的结果。 如果您运行代码,您将看到stage底部的GridPane非常适合它的单元格。但旋转后的网格窗格没有。我还将添加一张图片,

  • 问题内容: 我正在将AutoSizing单元格与Autolayout和UICollectionView一起使用。 我可以在单元初始化的代码中指定约束: 但是,由于该单元尚未添加到中,该应用程序崩溃了。 问题 在该阶段的生命周期,可以添加一个约束的? 有没有作出任何默认方式的equal to the of thewithout accessing an instance of or? 编辑 这个问题

  • 问题内容: 和其他几个,但是没有什么不是我想要的。我想要的是将某些内容缩放到其大小的50%(当然,还要进行动画效果的过渡),然后将页面布局重新调整为该元素的新(可视)大小。默认情况下似乎发生的是该元素仍保留其在布局结构中的原始大小,并且仅通过关联的转换进行绘制。 基本上,我希望用户单击一个文本块(或其他内容),然后将该文本缩放到其大小的50%(或任何其他大小),并将其粘贴在下面的面板中以表明已被选

  • 本文档概述了您可以用来调整图像的裁剪、旋转和画布大小的各种方法。 使用裁剪命令裁剪图像 使用选区工具来选择要保留的图像部分。 选取“图像”>“裁剪”。 使用裁切命令裁剪图像 “裁切”命令通过移去不需要的图像数据来裁剪图像,其所用的方式与“裁剪”命令所用的方式不同。可以通过裁切周围的透明像素或指定颜色的背景像素来裁剪图像。 选取“图像”>“裁切”。 在“裁切”对话框中选择选项: “透明像素”修整掉图

  • 我正在使用带有Autolayout和UICollectionView的自动调整单元格。 我可以在单元初始化代码中指定约束: 但是,应用会崩溃,因为单元格尚未添加到。 问题 > 在生命周期的哪个阶段,可以添加具有 的< code>width集合视图< code >的widthUIScreenUIWindow '的实例吗? 编辑问题不是重复的,因为它不是关于如何使用自动调整单元格大小功能,而是关于在使

  • 问题内容: 我有一个带有2行和可变列的表。我尝试了宽度= 100%的列。因此,视图中的第一个内容将适合。但是,假设我要动态更改内容,那么它就不会动态增加/减少HTML表列的大小。提前致谢。 问题答案: 如果要根据内容调整单元格的大小,则不得为表格,行或单元格指定宽度。 如果您不希望自动换行,请将CSS样式分配给单元格。