我正在尝试实现这样的布局:
基本上,我需要or
标签停留在中间并占据固定的宽度,并且线条向屏幕边缘延伸。
这就是我在XIB中所做的:
center
对齐的水平UIStackview。20
,将分布约束设置为fill
。UIView
元素(用于灰色线),并将高度限制设置为5。UIView
元素之间添加了一个UILabel。0
从超级视图开始,并以5
跟踪到中间标签4
从中间标签开始,以0
跟随到超级视图。在“界面”构建器上看起来不错,但是在不同的屏幕尺寸和横向上,我发现中间的“ or
”标签可以拉伸并踢掉左右UIViews来弥补可用空间,这似乎对:
如果我在中间标签上设置了20
的宽度约束,则右侧的UIView会像这样不均匀地拉伸:
我知道这里的元素的CHP在某种程度上很重要,我什至尝试设置以下CHP:
CHP为251
左右UIViews的CHP是250。
这仍然使正确的UIView伸展不均匀。
我做错了什么?见解非常感谢! 非常感谢!
答案 0 :(得分:1)
答案 1 :(得分:1)
您需要在widthConstraint
和UIStackView
上设置leftView.widthAnchor = rightView.widthAnchor
。另外,您可以在UIStackView上设置leading
和trailing
约束,然后设置leftView.widthAnchor = rightView.widthAnchor
。
下面是您可以在Playgrounds中试用的示例代码
let leftView = UIView()
leftView.translatesAutoresizingMaskIntoConstraints = false
leftView.backgroundColor = .lightGray
let rightView = UIView()
rightView.translatesAutoresizingMaskIntoConstraints = false
rightView.backgroundColor = .lightGray
let orLabel = UILabel()
orLabel.translatesAutoresizingMaskIntoConstraints = false
orLabel.textColor = .black
orLabel.text = "or"
let stackView = UIStackView(arrangedSubviews: [leftView, orLabel, rightView])
stackView.alignment = .center
stackView.distribution = .fill
stackView.axis = .horizontal
stackView.spacing = 5
stackView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(stackView)
stackView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
stackView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
stackView.heightAnchor.constraint(equalToConstant: 20).isActive = true
stackView.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
leftView.heightAnchor.constraint(equalToConstant: 5).isActive = true
rightView.heightAnchor.constraint(equalToConstant: 5).isActive = true
leftView.widthAnchor.constraint(equalTo: rightView.widthAnchor).isActive = true