我的UIViewController嵌入在导航控制器中。我以编程方式添加了导航按钮,现在尝试在此导航栏下方添加一个scrollView。我遇到的问题是,这是填满整个帧的大小并进入导航栏的下面。
我如何以编程方式设置此滚动视图的约束?
var scrollView: UIScrollView!
var containerView = UIView()
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.title = "Filters"
// add some buttons on the navigation
self.scrollView = UIScrollView()
self.scrollView.backgroundColor = UIColor.grayColor()
self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width, self.view.frame.size.height)
containerView = UIView()
scrollView.addSubview(containerView)
view.addSubview(scrollView)
let label = UILabel(frame: CGRectMake(0, 0, 100, 21))
label.text = "my label"
containerView.addSubview(label)
}
虽然Clafou的答案肯定是正确的,但是如果您不需要透明度并且想在导航栏下开始,那么真正正确的方法是更改ViewController的行为,以使其适合内容。为此,您有两个选择:
1)假设您有情节提要,请转到ViewController Attributes Inspector并禁用“ Under top bars”]
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9RbHNPai5wbmcifQ==” alt =“在此处输入图像描述”>
2)假设您通过代码完成了所有工作,则需要查找以下属性-edgesForExtendedLayout
和extendedLayoutIncludesOpaqueBars
。 SO上已经有great answer了,所以我在这里不做介绍。
希望有帮助!
我设法在iOS11上正常运行的唯一方法是这样
[使用auto-layout
时,请确保将top-constraint
的UIScrollView
赋予Top Layout Guide
,而不是滚动视图的superview
。
使用contentInset
的UIScrollView
属性。例如,如果您希望顶部有44点的空隙:
在Objective-C中,我通常将'edgesForExtendedLayout'属性设置为UIRectEdgeNone