以编程方式在导航栏下方的Swift iOS设置scrollView约束

问题描述 投票:12回答:5

我的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)
}
ios swift uiscrollview
5个回答
50
投票

虽然Clafou的答案肯定是正确的,但是如果您不需要透明度并且想在导航栏下开始,那么真正正确的方法是更改​​ViewController的行为,以使其适合内容。为此,您有两个选择:

1)假设您有情节提要,请转到ViewController Attributes Inspector并禁用“ Under top bars”]

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9RbHNPai5wbmcifQ==” alt =“在此处输入图像描述”>

2)假设您通过代码完成了所有工作,则需要查找以下属性-edgesForExtendedLayoutextendedLayoutIncludesOpaqueBars。 SO上已经有great answer了,所以我在这里不做介绍。

希望有帮助!


8
投票

我设法在iOS11上正常运行的唯一方法是这样


4
投票

[使用auto-layout时,请确保将top-constraintUIScrollView赋予Top Layout Guide,而不是滚动视图的superview


1
投票

使用contentInsetUIScrollView属性。例如,如果您希望顶部有44点的空隙:


0
投票

在Objective-C中,我通常将'edgesForExtendedLayout'属性设置为UIRectEdgeNone

© www.soinside.com 2019 - 2024. All rights reserved.