Swift - UIScrollView 的约束问题(以编程方式)
Swift - constraint issues with UIScrollView (programmatically)
我最近在 viewcontroller 中添加了一个滚动视图。但是,这导致我的布局完全混乱。
下面是一张图片。
(我给了 UIScrollView 一个临时的红色背景,显示,它显然是全屏)
现在。在这个视图中我有很多东西。但为简单起见,我将重点关注顶部的蓝色条,在我的应用程序中称为 "topBar"
首先,我在 class 中定义了它。
var topBar = UIView()
我删除了自动调整大小,为其添加颜色并将其添加到我的滚动视图中。
//----------------- topBar ---------------//
topBar.setTranslatesAutoresizingMaskIntoConstraints(false)
topBar.backgroundColor = UIColor.formulaBlueColor()
self.scrollView.addSubview(topBar)
将其添加到我的视图词典中:
var viewsDictionary = [ "topBar":topBar]
将高度添加到我的 metricsDictionary:
let metricsDictionary = ["topBarHeight":6]
在尺寸限制中设置高度。
//sizing constraints
self.scrollView.addConstraints(
NSLayoutConstraint.constraintsWithVisualFormat(
"V:[topBar(topBarHeight)]", options: NSLayoutFormatOptions(0), metrics: metricsDictionary, views: viewsDictionary))
最后是不起作用的部分。我 /attempt/ 使其成为 "scrollView"
的全宽
// Horizontal Constraints
self.scrollView.addConstraints(
NSLayoutConstraint.constraintsWithVisualFormat(
"H:|[topBar]|", options: nil, metrics: nil, views: viewsDictionary))
我的垂直约束将它放在顶部。
// Vertical Constraints
self.scrollView.addConstraints(
NSLayoutConstraint.constraintsWithVisualFormat(
"V:|[topBar]", options: nil, metrics: nil, views: viewsDictionary))
现在关于我的滚动视图,(可能让我头疼的布局)
设置如下:
作为 class 中的第一件事:
let scrollView = UIScrollView(frame: UIScreen.mainScreen().bounds)
我 viewDidLoad() 中的第一件事
self.view.addSubview(scrollView)
scrollView.setTranslatesAutoresizingMaskIntoConstraints(false)
scrollView.scrollEnabled = true
最后是我的 viewDidLayoutSubviews。
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
scrollView.frame = view.bounds
scrollView.contentSize = CGSize(width:2000, height: 5678)
}
^ contentSize 的宽度将更改为屏幕的宽度(我只想垂直滚动)。但现在与我遇到的布局问题相比,这是一个小问题
任何关于为什么所有东西都挤在一起的帮助将不胜感激!
我通过以下操作成功修复了它。
正在 viewDidLayoutSubviews
中定义我的内容大小
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
scrollView.frame = view.bounds
scrollView.contentSize = CGSize(width:self.view.bounds.width, height: 5678)
}
我没有让视图等于滚动视图,而是让它成为它的子视图。
我还必须制作滚动视图的子视图,以便我的所有内容都能正确处理约束。
self.view.addSubview(scrollView)
scrollView.translatesAutoresizingMaskIntoConstraints = false
contentView.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(contentView)
我的所有其他对象都是 "contentView" 的子视图,而不是滚动视图。
我最近在 viewcontroller 中添加了一个滚动视图。但是,这导致我的布局完全混乱。
下面是一张图片。
(我给了 UIScrollView 一个临时的红色背景,显示,它显然是全屏)
现在。在这个视图中我有很多东西。但为简单起见,我将重点关注顶部的蓝色条,在我的应用程序中称为 "topBar"
首先,我在 class 中定义了它。
var topBar = UIView()
我删除了自动调整大小,为其添加颜色并将其添加到我的滚动视图中。
//----------------- topBar ---------------//
topBar.setTranslatesAutoresizingMaskIntoConstraints(false)
topBar.backgroundColor = UIColor.formulaBlueColor()
self.scrollView.addSubview(topBar)
将其添加到我的视图词典中:
var viewsDictionary = [ "topBar":topBar]
将高度添加到我的 metricsDictionary:
let metricsDictionary = ["topBarHeight":6]
在尺寸限制中设置高度。
//sizing constraints
self.scrollView.addConstraints(
NSLayoutConstraint.constraintsWithVisualFormat(
"V:[topBar(topBarHeight)]", options: NSLayoutFormatOptions(0), metrics: metricsDictionary, views: viewsDictionary))
最后是不起作用的部分。我 /attempt/ 使其成为 "scrollView"
的全宽// Horizontal Constraints
self.scrollView.addConstraints(
NSLayoutConstraint.constraintsWithVisualFormat(
"H:|[topBar]|", options: nil, metrics: nil, views: viewsDictionary))
我的垂直约束将它放在顶部。
// Vertical Constraints
self.scrollView.addConstraints(
NSLayoutConstraint.constraintsWithVisualFormat(
"V:|[topBar]", options: nil, metrics: nil, views: viewsDictionary))
现在关于我的滚动视图,(可能让我头疼的布局)
设置如下:
作为 class 中的第一件事:
let scrollView = UIScrollView(frame: UIScreen.mainScreen().bounds)
我 viewDidLoad() 中的第一件事
self.view.addSubview(scrollView)
scrollView.setTranslatesAutoresizingMaskIntoConstraints(false)
scrollView.scrollEnabled = true
最后是我的 viewDidLayoutSubviews。
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
scrollView.frame = view.bounds
scrollView.contentSize = CGSize(width:2000, height: 5678)
}
^ contentSize 的宽度将更改为屏幕的宽度(我只想垂直滚动)。但现在与我遇到的布局问题相比,这是一个小问题
任何关于为什么所有东西都挤在一起的帮助将不胜感激!
我通过以下操作成功修复了它。
正在 viewDidLayoutSubviews
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
scrollView.frame = view.bounds
scrollView.contentSize = CGSize(width:self.view.bounds.width, height: 5678)
}
我没有让视图等于滚动视图,而是让它成为它的子视图。
我还必须制作滚动视图的子视图,以便我的所有内容都能正确处理约束。
self.view.addSubview(scrollView)
scrollView.translatesAutoresizingMaskIntoConstraints = false
contentView.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(contentView)
我的所有其他对象都是 "contentView" 的子视图,而不是滚动视图。