【问题标题】:iOS - get the navigation bar height inside a cell classiOS - 获取单元格类内的导航栏高度
【发布时间】:2017-10-23 21:51:18
【问题描述】:

我正在实现一些 UICollectionViewCell 类来填充嵌入在 NavigationController 中的普通 UICollectionView。

在这个单元格类中,我需要获取将呈现这个单元格的 collectionView 的 navigationController 的 NavigationBar 高度。

我的问题是,我需要在单元创建过程中预先获取这些数据,而不是之后。

如果是在我简单地将单元格投射到 cellForItemAt 内并在那里填充一些属性之后,但我需要预先设置。

解决这个问题的最佳方法是什么?

这将与常规 tableViewCell 相同 您将如何访问单元格类中的 NavigationController.navigationBar 高度?

我知道高度大多是 44,但我不想强制使用此值,因为它可能会因设备而异,并且如果我访问该属性,该值将始终正确且无错误。

这不是navigationController.navigationBar.frame.height 的常规调用,因为在单元类内部没有navigationController

感谢您的帮助。

【问题讨论】:

  • 这不应设置为重复,因为上下文不同
  • 除非 Apple 在未来的 iOS 版本中更改某些内容,否则导航栏高度始终为 44,无论设备如何。现在,我了解您希望代码干净并以编程方式访问值的愿望,但这似乎有点矫枉过正。还有cells creation process是什么意思?有很多步骤,你的意思是什么?
  • 好吧,基本上我有我的常规 UICollectionViewCell 类,对吧?然后在里面我有一些属性和对象,其中一些我以编程方式锚定,因为在这个特定的单元格中我正在创建一个标题单元格,我需要获得正确的大小,以便之后在 UICollectionView 控制器中正确地进行动画处理本身。太好了,你了解我的 POV ;)
  • 如果您只想在UICollectionView 中创建一个标题,那么这可能会对您有所帮助。 appcoda.com/supplementary-view-uicollectionview-flow-layout

标签: ios swift3 uinavigationbar uicollectionviewcell


【解决方案1】:

在您的单元格中使用此代码获取 UIViewController:

extension UIView
{
    func viewController() -> UIViewController? {
        var responder : UIResponder? = self
        while let r = responder {
            if r.isKind(of: UIView.self) {
                responder = r.next
            } else {
                break
            }
        }
        return responder as? UIViewController
    }
}

然后,您可以按照您的意愿拨打viewController.navigationController.navigationBar.frame.height

【讨论】:

  • 嗯...不错的提示;让我快速尝试一下:D
  • 如果单元格还不存在且未出队,这是否可行?从问题中我们可以推断出 OP 在调用 cellForItem 之前想要此信息。
  • 确实如此。我需要创建时的信息,当我将单元格对象锚定在其中时,而不是在 cellForItemAt 中,无论如何我正在尝试访问,如果使用此示例,如果它不起作用,我会努力 -将其编码为 44px
  • @IvanCantarino 抱歉,我刚刚注意到这是针对 Swift 的,我为您更新了代码。
  • @Losiowaty 在单元格出列之前这将不起作用。你不能从 awakeFromNib() 调用它。
猜你喜欢
  • 2015-06-26
  • 1970-01-01
  • 1970-01-01
  • 2017-09-19
  • 1970-01-01
  • 2020-08-30
  • 2017-11-14
  • 1970-01-01
  • 2015-11-15
相关资源
最近更新 更多