是否可以将 UIView 的顶部固定到导航栏的底部?

Posted

技术标签:

【中文标题】是否可以将 UIView 的顶部固定到导航栏的底部?【英文标题】:Is it possible to pin a UIView's top to the bottom of the navigation bar? 【发布时间】:2014-11-10 06:25:34 【问题描述】:

我试图将我的 UIView 定位在导航栏下方 20pt,但是当我将它设置为相对于视图控制器上的视图时,它仍然位于导航栏下方 20pt,我不想对其进行硬编码.

是否可以将其放置在远离导航栏的位置?

【问题讨论】:

【参考方案1】:

要以编程方式执行此操作,请使用视图控制器的 topLayoutGuide

override func viewDidLoad() 
    ...
    myView.topAnchor.constraint(equalTo: self.topLayoutGuide.bottomAnchor).isActive=true
    ...

【讨论】:

【参考方案2】:

尝试使用 TopLayoutGuide 添加约束,

TopLayoutGuide 和 self.view 的主要区别在于,topLayoutGuide 以bottom of status bar + bottom of navigation bar(if exist) 开头,而在 ios 7 中 self.view 总是从 (0,0) 坐标开始,用于半透明导航栏。

因此,在您的情况下,您应该尝试从顶部布局指南进行固定。

【讨论】:

你将如何以编程方式做到这一点? UIViewController 已经提供了category 属性来访问topLayoutGuide 和bottomLayoutGuide 接口 UIViewController (UILayoutSupport) // 这些对象可以作为NSLayoutConstraint API 中的布局项 property(nonatomic,readonly,retain) id topLayoutGuide NS_AVAILABLE_IOS(7_0); property(nonatomic,readonly,retain) id bottomLayoutGuide NS_AVAILABLE_IOS(7_0);看看这个答案:***.com/a/19779200/1582217【参考方案3】:

从 iOS 11.0 开始,您可以通过编程方式使用 view.safeAreaLayoutGuide

override func viewDidLoad() 
    ...
    label.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive=true

【讨论】:

【参考方案4】:

固定到顶部安全区域布局指南。如果您使用的是 SnapKit,请编写代码:

titleLabel.snp.makeConstraints  make in
    make.top.equalTo(view.safeAreaLayoutGuide.snp.top).offset(20)
    make.leading.equalToSuperview()

【讨论】:

【参考方案5】:

所以你的 UIView 位于 UIViewController 中,对吗?

当您将初始内部 UIView 定义为该 UIViewController 时,您可以将其坐标设置为距 ViewController 顶部 20px 吗?

例如:

//
//  ViewControllerEx.swift
//

import UIKit

class ViewControllerExample: UIViewController 

    override func viewDidLoad() 
        super.viewDidLoad()

        var innerContainer = UIView(frame: CGRectMake(0, 20, self.view.bounds.width, self.view.bounds.height-20))

        self.view.addSubview(innerContainer)
      

【讨论】:

以上是关于是否可以将 UIView 的顶部固定到导航栏的底部?的主要内容,如果未能解决你的问题,请参考以下文章

自动布局和 AVPlayerViewController

是否可以在 UIView 上设置顶栏?

iOS上具有输入字段和标签的顶部固定导航栏的不可预测行为

h5之vue自定义底部导航栏

小程序自定义导航栏仿原生固定在顶部

无法将 UIView 定位到 TableView 的底部