是否可以将 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从 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 的顶部固定到导航栏的底部?的主要内容,如果未能解决你的问题,请参考以下文章