Ios 是否可以固定UIView';从导航栏的顶部到底部是什么?

Ios 是否可以固定UIView';从导航栏的顶部到底部是什么?,ios,cocoa-touch,uiview,autolayout,nslayoutconstraint,Ios,Cocoa Touch,Uiview,Autolayout,Nslayoutconstraint,我试图将UIView设置为导航栏下的20pt,但当我将其相对于视图控制器上的视图设置时,它仍然位于导航栏下的20pt,我不想硬编码它 是否可以将其放置在远离导航栏的位置?以便您的UIView位于UIViewController中,对吗 当您为该UIViewController定义初始内部UIView时,能否将其坐标设置为离开ViewController顶部20px 例如: // // ViewControllerEx.swift // import UIKit class ViewCont

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


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

以便您的UIView位于UIViewController中,对吗

当您为该UIViewController定义初始内部UIView时,能否将其坐标设置为离开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)
    }  
}

尝试使用TopLayoutGuide添加约束

TopLayoutGuide和self.view之间的主要区别在于,top layout guide以状态栏底部+导航栏底部(如果存在)开始,但对于半透明导航栏,self.view始终从iOS 7中的(0,0)坐标开始

所以,在您的情况下,您应该尝试从顶部布局指南固定


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

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

在iOS 11.0中,您可以通过编程方式使用查看。安全区域布局指南:

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

您将如何以编程方式执行此操作?UIViewController已提供类别属性以访问topLayoutGuide和bottomLayoutGuide接口UIViewController(UILayoutSupport)//这些对象可以用作NSLayoutConstraint API属性(非原子、只读、保留)id topLayoutGuide NS\u AVAILABLE\u IOS(7\u 0)中的布局项;属性(非原子、只读、保留)id bottomLayoutGuide NS\u可用\u IOS(7\u 0);请看下面的答案: