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

12 uiscrollview ios swift

所以我的UIViewController嵌入在导航控制器中.我以编程方式添加导航按钮,现在尝试在此导航栏下方添加scrollView.我遇到的问题是填充整个框架大小并进入导航栏.

如何以编程方式设置此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)
}
Run Code Online (Sandbox Code Playgroud)

Jir*_*cak 50

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

1)假设您有故事板,请转到ViewController属性检查器并禁用"在顶部栏下"

在此输入图像描述

2)假设你是通过代码的一切,你将需要寻找以下属性 - edgesForExtendedLayout,和extendedLayoutIncludesOpaqueBars.已经在SO上有很好的答案所以我不会在这里介绍它.

希望能帮助到你!


Zay*_*ige 10

我设法让这个在iOS11上工作的唯一方法就是这样

if (@available(iOS 11.0, *)) {
    scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
} else {
    // Fallback on earlier versions
}
Run Code Online (Sandbox Code Playgroud)


dam*_*amo 6

在斯威夫特 5

let scrollView = UIScrollView()
scrollView.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(imageView)
scrollView.contentInsetAdjustmentBehavior = .never

NSLayoutConstraint.activate([
    scrollView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor)
])
Run Code Online (Sandbox Code Playgroud)