IOS TableView第一个单元格图像应该从状态栏开始

Posted

技术标签:

【中文标题】IOS TableView第一个单元格图像应该从状态栏开始【英文标题】:IOS TableView first cell Image should start from status bar 【发布时间】:2019-06-05 07:54:19 【问题描述】:

创建的表格视图,其中第一个单元格包含一个图像我希望此图像与状态栏重叠,如下图所示。如何相应地创建 NavigationBar?

尝试以下代码行对我不起作用。

tableView.contentInset = UIEdgeInsets(top: -UIApplication.shared.statusBarFrame.size.height, left: 0, bottom: 0, right: 0)

也玩过安全区和超级视野,但没有运气

更新:

现在为表格视图添加了超级视图-90约束的顶部空间图像在状态栏中可见想知道是正确的做法还是有其他方法

由于导航控制器和导航栏,发现顶部有空白黑色空间,直到我将顶部空间设置为超级视图,因为 -90 以下是图像

在故事板中,我可以检查顶部的空白空间是否被导航项占用

【问题讨论】:

你考虑过这个吗? developer.apple.com/library/archive/qa/qa1797/_index.html 关于防止状态栏覆盖您的视图 是的,但它也解释了如何覆盖它。 没有解决我的问题 【参考方案1】:

首先,调整约束如下图:

然后创建带有三个按钮的 Top/Navigation 视图,它们应该在 tableview 上方,背景颜色为clear。与上图相同。顶视图的top constraint 应该是top alignedsafe area

将以下方法放入您的控制器中:

override func viewWillAppear(_ animated: Bool) 
    super.viewWillAppear(animated)
    self.navigationController?.setNavigationBarHidden(true, animated: true)


override func viewWillDisappear(_ animated: Bool) 
    super.viewWillDisappear(animated)
    self.navigationController?.setNavigationBarHidden(false, animated: true)

现在,当您运行时,它看起来就像您想要的那样。

【讨论】:

@amodkanthe 你试过这个吗?或者您找到了其他解决方案? 我不想模拟导航栏有没有其他方法可以在不隐藏导航栏的情况下做到这一点【参考方案2】:

您是否尝试过不将***约束附加到安全区域而是附加到超级视图?

你也可以试试这个:

 self.contentInsetAdjustmentBehavior = .never 

【讨论】:

@amodkanthe 你也可以试试这个,self.contentInsetAdjustmentBehavior = .never updated my answer 不工作我猜 NavigationController 套管问题更新问题请检查【参考方案3】:

将 tableview top constraint 0 设置为 superview 并在 viewDidLoad 中使用以下代码:

    tableView.contentInsetAdjustmentBehavior = .never

    self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
    self.navigationController?.navigationBar.shadowImage = UIImage()
    self.navigationController?.navigationBar.isTranslucent = true
    self.view.backgroundColor = UIColor.clear

【讨论】:

【参考方案4】:

将tableview.top的top约束添加到superview.top

【讨论】:

不工作我猜 NavigationController 套管问题更新问题请检查【参考方案5】:

将 tableview 顶部约束设置为 0 到 superview 并使导航栏透明。如果需要,请使用我制作的扩展以使导航栏透明。

extension UINavigationController 

    func transparent()  
        self.navigationBar.setBackgroundImage(UIImage(), for: .default)
        self.navigationBar.shadowImage = UIImage()
        self.navigationBar.isTranslucent = true // set bartintColor if isTranslucent is false
        self.view.backgroundColor = UIColor.clear
    

    func nonTransparent() 
        self.view.backgroundColor = UIColor.black.withAlphaComponent(0.75)
        self.navigationBar.isTranslucent = false
        self.navigationBar.barTintColor = UIColor.white
    


【讨论】:

您好,这将使栏变得透明,什么是***约束更新答案请检查 你应该让 tableView 坚持 superview 让它看起来像上图所示。 这使栏透明,但在顶部留出空间,除非我添加空间 -90,否则它不起作用 这可能是因为整个图像视图没有被图像覆盖。尝试将图像视图的内容模式更改为缩放以填充或使用顶部约束 0 填充。 不工作我猜 NavigationController 套管问题更新问题请检查【参考方案6】:

您可以“模拟”导航栏并实现您的目标。

    将 tableView 限制为 superview.top 0

    设置 tableview.contentInsetsAdjustmentsBehavior = .never

    在 viewWillAppear 上调用self.navigationController?.setNavigationBarHidden(true, animated: animated)

    将您的后退按钮和其他应位于表格视图上方导航栏中的项目。可以使用 tableView 的 superview 但不要忘记将它们移到 tableView 上方。为它们使用顶部安全区域,这样它就会像放置在导航栏中一样锁定。

注意:这个东西会禁用边缘平移手势导航回来。

【讨论】:

【参考方案7】:

为了创建该布局:

    您必须将 tableView 固定到 view.TopAnchor

    将 contentInsetAdjustmentBehavior 设置为从不 tableView.contentInsetAdjustmentBehavior = .never

    将单元格内的 imageView 的 topAnchor 设置为 contentView.topAnchor

    设置navigationController的背景图片和阴影图片: navigationBar.setBackgroundImage(UIImage(), for: .default) navigationBar.shadowImage = UIImage()

    如果一切顺利,请告诉我。它必须工作

【讨论】:

以上是关于IOS TableView第一个单元格图像应该从状态栏开始的主要内容,如果未能解决你的问题,请参考以下文章

如何在一个 tableView 中使用两个不同的自定义单元格?使用情节提要,iOS 7

iOS swift UIImageView更改tableView单元格中的图像

如何删除不可见的 tableview 单元格的下载图像。在ios中

ios在tableview单元格中显示/隐藏视图

图像未正确加载

ios:在点击collectionview单元格或tableview单元格时禁用第二个触摸事件