我将UILabel
放在UIScrollView
内,我想在标签上添加以下约束:
上边距是20
左边距为20
右边距为20
标签的高度为40
这是我使用视觉格式为这些约束编写的代码:
let label = UILabel.init(frame: .zero)
label.translatesAutoresizingMaskIntoConstraints = false
label.text = "Some Text"
scrollView.addSubview(label)
let horizontalConstraints = NSLayoutConstraint.constraints(
withVisualFormat: "H:|-20-[label]-20-|",
options: [],
metrics: nil,
views: ["label": label]
)
let verticalConstraints = NSLayoutConstraint.constraints(
withVisualFormat: "V:|-20-[label(40)]",
options: [],
metrics: nil,
views: ["label": label]
)
NSLayoutConstraint.activate(horizontalConstraints + verticalConstraints)
但是我得到的是this picture(由于我的声誉低,所以无法上传照片)。我在视图中添加了边框,蓝色的是UIScrollView
的边框,红色的是UILabel
的边框
答案 0 :(得分:0)
您的代码不正确。这是代码的外观。而且,如果您使用这种添加约束的方式,则无需使用特殊方法来激活约束。这些垂直和水平约束已经激活。
//horizontal constraints
scrollView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-20-[v0]-20-|",
options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": label]))
//vertical constraints
scrollView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-20-[v0(40)]",
options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": label]))
语法说明:
"H", "V"
-水平,垂直约束
"|"
-锚点,例如"H:|[v0]"
-左锚点
"-20-"
-偏移量,例如“ V:| -20- [v0]”-偏移量为20的顶部锚点
"[v0(40)]"
-这是视图的大小,例如"V:[v0(40)]"
-高度为40
"[v0]"
-您的第一个视觉格式视图。这种格式可以为多个视图设置约束。
例如:
(格式:“ V:| -16- [v0] -8- [v1(44)]-16- [v2(1)] |”,视图:[“ v0”:firstView],[“ v1 “:secondView],[” v2“:thirdView])
答案 1 :(得分:0)
我想通了。尽管我不知道为什么会这样,但无论是UIScrollView
的错误还是只是需要用这种方式完成。
显然,当将子视图添加到故事板中的UIScrollView
时,您总是会收到一条警告,指出子视图的位置不明确。因此,您要做的是向滚动视图中添加一个UIView
并向其中添加这些约束:
顶部= 0,领先= 0,尾随= 0,底部= 0
UIView
在滚动视图中水平和垂直居中
在那之后,最好将子视图添加到UIView
而不得到那些警告。
同样的原因在这里适用,当您要以编程方式向UIScrollView
添加子视图并设置一些约束时,应在滚动视图中放置UIView
并将所有子视图置于{ {1}}:
UIView
完成这四个步骤后,现在可以将子视图添加到“ subviewContainer”中。