我的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)
}
7条答案
按热度按时间vtwuwzda1#
Clafou的答案当然是正确的,但如果你不需要透明,想从导航栏开始,真正正确的方法是改变ViewController的行为,使其适合内容。要做到这一点,你有两个选择:
1)假设你有情节串联图板,转到视图控制器属性检查器并禁用"顶部栏下"
2)假设您通过代码完成所有操作,您将需要查找以下属性-
edgesForExtendedLayout
和extendedLayoutIncludesOpaqueBars
。SO上已经有great answer,所以我不会在这里讨论它。希望能有所帮助!
9lowa7mx2#
我设法让这个在iOS11上工作的唯一方法是这样的
beq87vna3#
雨燕5
zu0ti5jz4#
在使用
auto-layout
时,只需确保将UIScrollView
的top-constraint
与Top Layout Guide
一起提供,而不是与滚动视图的superview
一起提供。kuuvgm7e5#
在Objective-C中,我通常将“edgesForExtendedLayout”属性设置为 UIRectEdgeNone:
尽管如此,我还是建议将约束绑定到 topLayoutGuide
希望这对你有用。
wgxvkvu96#
要在导航栏下放置任何视图,请使用以下代码:
2uluyalo7#
https://stackoverflow.com/a/75143442/851258的另一个解决方案