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

时间:2019-06-05 07:54:19

标签: ios swift tableview navigationbar iphone-x

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

enter image description here

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

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

也可以在安全区域和超级视野中玩耍,但是没有运气

更新:

现在已将s​​uperspace的顶部空间添加到tableview的-90约束中,图像在状态栏中可见,想知道这样做是正确的方法还是其他方法

enter image description here

发现由于导航控制器和导航栏的顶部顶部有空白空间,因此直到我将超级空间的顶部空间设置为-90后(是图像),它才起作用

enter image description here

在StoryBoard中,我可以检查导航项占用的顶部空白空间

enter image description here

7 个答案:

答案 0 :(得分:3)

首先,调整与下图相同的约束:

Table Constraint

然后使用三个按钮创建“俯视图/导航”视图,该视图应位于具有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)
}

现在,当您运行时,它将完全看起来像您想要的。

Table First cell should overwrite navigation bar

答案 1 :(得分:2)

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

您也可以尝试以下方法:

 self.contentInsetAdjustmentBehavior = .never 

答案 2 :(得分:2)

将tableview设置为顶部约束0到超级视图,并在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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

使tableview的顶部约束0成为超级视图并使导航栏透明。如果需要,请使用我制作的扩展名以使导航栏透明。

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
    }

}

答案 5 :(得分:0)

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

  1. 将tableView限制为superview.top 0

  2. 设置tableview.contentInsetsAdjustmentsBehavior = .never

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

  4. 将后退按钮和其他项目放置在表格视图上方的导航栏中。可以使用tableView的超级视图,但不要忘记将其移到tableView上方。为他们使用最安全的区域,以便像放置在navigationBar中一样锁定。

注意:此操作将禁用向后导航的边缘平移手势。

答案 6 :(得分:0)

以创建该布局:

  1. 您必须将tableView固定到<div class="form-group col-xs-12 col-md-8"> <p-galleria [images]="images" panelWidth="200" panelHeight="100" autoPlay="false" (onImageClicked)="onImageClicked($event)" [showCaption]="true"></p-galleria> </div>

  2. 将contentInsetAdjustmentBehavior设置为从不view.TopAnchor

  3. 将单元格内imageView的topAnchor设置为tableView.contentInsetAdjustmentBehavior = .never
  4. 设置navigationController的背景图像和阴影图像: contentView.topAnchor

    让我知道是否一切都很好。它必须工作