swift: uicollectionview 在过渡期间更改单元格的 contentoffset

Posted

技术标签:

【中文标题】swift: uicollectionview 在过渡期间更改单元格的 contentoffset【英文标题】:swift: uicollectionview changes contentoffset of the cell during transition 【发布时间】:2017-10-18 08:05:15 【问题描述】:

我有一个简单的 UICollectionView,在 navigationController 中有一个自定义单元格。出于某种原因,当我推送 viewController 时,collectionView 单元格在转换期间会更改其布局。

在 viewController 转换过程中,这是 uicollectionview 的一些常见行为吗?因为,例如:标签就没有这样的问题

When back button was clicked 来自collectionView的绿色

添加新的视图控制器

navigationController?.pushViewController(controller, animated: true)

使用EasyPeasy pod 设置自动布局

collectionView.easy.layout([
  Top(),
  Right(),
  Width(view.frame.width),
  Bottom(10).to(button),
])

button.easy.layout([
  Center(),
  Height(60),
  Width(300),
])

【问题讨论】:

你有什么代码可以给我们看吗? 很难理解你想用这些约束做什么,但你没有为 collectionview 使用任何高度。我认为这是由按钮计算的。看起来绿色的collectionview被设置为10px(也许?)。你什么时候在你的代码中设置约束?那个蓝色框是什么,以及该元素的约束条件是什么?感觉你的自动布局还是有问题.. @MartinBorstrand UICollectionViewCell 的背景颜色为蓝色。我在 viewDidLoad 中设置了约束。对不起给您带来不便。似乎在过渡回单元格变小了 Okej,那你设置单元格的大小了吗?看起来怎么样? @MartinBorstrand 在 collectionView(:sizeForItemAt) 中返回 CGSize(width: collectionView.bounds.width, height: collectionView.bounds.height)。正如我上面已经添加的那样,这种行为只发生在 collectionView 单元格 【参考方案1】:

我想我已经找到了您的问题,并且它在您的 AppDelegate 中。导航控制器设置为 false 的属性 isTranslucent 似乎导致了这个罕见的问题。一个半透明的导航栏将在您的 viewcontroller 的视图之上,就像它上面一样。一个非半透明的导航栏会向下推视图控制器的视图,或者换句话说,调整它的大小以使其适合它。但是为什么 collectionview 会像它那样动画是我实际上无法给出明确答案的原因。也许其他人可以做到这一点?..

要保持导航栏半透明,您可以在视图控制器中设置另一个属性,即“extendedLayoutIncluedsOpaqueBars”为 true。

所以.. 这样做。在您的 AppDelegate 中:

window = UIWindow(frame: UIScreen.main.bounds)
window!.makeKeyAndVisible()
let controller = TestingNavigationController()
let navigation = UINavigationController(rootViewController: controller)
window!.rootViewController = navigation

let navigationBarAppereance = UINavigationBar.appearance()
navigationBarAppereance.isTranslucent = false

然后,在您的视图控制器 viewDidLoad 方法中添加这一行

extendedLayoutIncludesOpaqueBars = true

希望这能解决您的问题! :)

Apple Documentation about extendedLayoutIncludesOpaqueBars

【讨论】:

@Dauren 你能对我的回答做出反应吗?

以上是关于swift: uicollectionview 在过渡期间更改单元格的 contentoffset的主要内容,如果未能解决你的问题,请参考以下文章

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

Swift 3 中的 UICollectionView + NSFetchedResultsController

swift 在Swift中键入UITableView和UICollectionView Dequeuing

麻烦出队 uicollectionview 单元格(swift 3)

Swift:UICollectionView - 固定单元格之间的空间

如何在 Swift 中更改 UICollectionView 的 targetContentOffset?