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

时间:2014-11-10 06:25:34

标签: ios cocoa-touch uiview autolayout nslayoutconstraint

我试图将UIView定位在导航栏下方20pt,但是当我相对于视图控制器上的视图设置它时,它仍然位于20pt的导航栏下方,我不知道#39;我想硬编码。

是否可以将其远离导航栏?

4 个答案:

答案 0 :(得分:4)

尝试在TopLayoutGuide中添加约束,

TopLayoutGuide和self.view之间的主要区别在于,顶部布局指南以bottom of status bar + bottom of navigation bar(if exist)开头,但self.view始终从iOS 7中的(0,0)坐标开始,用于半透明导航栏。

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

Top Layout Guide self.view

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

从iOS 11.0以编程方式可以使用view.safeAreaLayoutGuide

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

答案 3 :(得分:-2)

所以你的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)
    }  
}