以编程方式将 UIView 放在 UILabel 后面
place UIView behind UILabel programmatically
我想问一下。我想在 uilabel 后面创建一个 UIView,我现在正在从 collectionview 创建分段的 Controll。我怎样才能让 uiview 落后于 uilabel?
这是我的代码
nameLabel.translatesAutoresizingMaskIntoConstraints = false
addSubview(nameLabel)
NSLayoutConstraint.activate([
nameLabel.topAnchor.constraint(equalTo: topAnchor),
nameLabel.leadingAnchor.constraint(equalTo: leadingAnchor),
nameLabel.bottomAnchor.constraint(equalTo: bottomAnchor),
nameLabel.trailingAnchor.constraint(equalTo: trailingAnchor)
])
let backgroundView = UIView()
backgroundView.backgroundColor = .white
backgroundView.translatesAutoresizingMaskIntoConstraints = false
addSubview(backgroundView)
insertSubview(backgroundView, aboveSubview: nameLabel)
backgroundView.leadingAnchor.constraint(equalTo: nameLabel.leadingAnchor).isActive = true
backgroundView.bottomAnchor.constraint(equalTo: nameLabel.bottomAnchor).isActive = true
backgroundView.widthAnchor.constraint(equalTo: nameLabel.widthAnchor, multiplier: 1).isActive = true
backgroundView.heightAnchor.constraint(equalToConstant: 48).isActive = true
视图被添加到前面。在 addSubview(newLabel)
.
之前 addSubview(backgroundView)
像这样的东西应该可以工作:
let backgroundView = UIView()
backgroundView.backgroundColor = .white
backgroundView.translatesAutoresizingMaskIntoConstraints = false
addSubview(backgroundView)
nameLabel.translatesAutoresizingMaskIntoConstraints = false
addSubview(nameLabel)
NSLayoutConstraint.activate([
nameLabel.topAnchor.constraint(equalTo: topAnchor),
nameLabel.leadingAnchor.constraint(equalTo: leadingAnchor),
nameLabel.bottomAnchor.constraint(equalTo: bottomAnchor),
nameLabel.trailingAnchor.constraint(equalTo: trailingAnchor),
backgroundView.leadingAnchor.constraint(equalTo: nameLabel.leadingAnchor),
backgroundView.bottomAnchor.constraint(equalTo: nameLabel.bottomAnchor),
backgroundView.widthAnchor.constraint(equalTo: nameLabel.widthAnchor, multiplier: 1),
backgroundView.heightAnchor.constraint(equalToConstant: 48)
])
您可以使用@Vacawama 的回答,或者您应该注意到 Apple 提供了 2 API,例如:
func sendSubviewToBack(_ view: UIView)
和
func bringSubviewToFront(_ view: UIView)
因此您可以通过编程方式处理视图层次结构。
也许您可以尝试将 backgroundView 移到情节提要中标签的上方,这样您就可以将它放在后面(因为它在情节提要中是先进先出的)。
或使用sendSubviewToBack(backgroundView)
.
或使用bringSubviewToFront(nameLabel)
.
或view.addSubview(backgroundView)
然后view.addSubview(nameLabel)
。
我想问一下。我想在 uilabel 后面创建一个 UIView,我现在正在从 collectionview 创建分段的 Controll。我怎样才能让 uiview 落后于 uilabel? 这是我的代码
nameLabel.translatesAutoresizingMaskIntoConstraints = false
addSubview(nameLabel)
NSLayoutConstraint.activate([
nameLabel.topAnchor.constraint(equalTo: topAnchor),
nameLabel.leadingAnchor.constraint(equalTo: leadingAnchor),
nameLabel.bottomAnchor.constraint(equalTo: bottomAnchor),
nameLabel.trailingAnchor.constraint(equalTo: trailingAnchor)
])
let backgroundView = UIView()
backgroundView.backgroundColor = .white
backgroundView.translatesAutoresizingMaskIntoConstraints = false
addSubview(backgroundView)
insertSubview(backgroundView, aboveSubview: nameLabel)
backgroundView.leadingAnchor.constraint(equalTo: nameLabel.leadingAnchor).isActive = true
backgroundView.bottomAnchor.constraint(equalTo: nameLabel.bottomAnchor).isActive = true
backgroundView.widthAnchor.constraint(equalTo: nameLabel.widthAnchor, multiplier: 1).isActive = true
backgroundView.heightAnchor.constraint(equalToConstant: 48).isActive = true
视图被添加到前面。在 addSubview(newLabel)
.
addSubview(backgroundView)
像这样的东西应该可以工作:
let backgroundView = UIView()
backgroundView.backgroundColor = .white
backgroundView.translatesAutoresizingMaskIntoConstraints = false
addSubview(backgroundView)
nameLabel.translatesAutoresizingMaskIntoConstraints = false
addSubview(nameLabel)
NSLayoutConstraint.activate([
nameLabel.topAnchor.constraint(equalTo: topAnchor),
nameLabel.leadingAnchor.constraint(equalTo: leadingAnchor),
nameLabel.bottomAnchor.constraint(equalTo: bottomAnchor),
nameLabel.trailingAnchor.constraint(equalTo: trailingAnchor),
backgroundView.leadingAnchor.constraint(equalTo: nameLabel.leadingAnchor),
backgroundView.bottomAnchor.constraint(equalTo: nameLabel.bottomAnchor),
backgroundView.widthAnchor.constraint(equalTo: nameLabel.widthAnchor, multiplier: 1),
backgroundView.heightAnchor.constraint(equalToConstant: 48)
])
您可以使用@Vacawama 的回答,或者您应该注意到 Apple 提供了 2 API,例如:
func sendSubviewToBack(_ view: UIView)
和
func bringSubviewToFront(_ view: UIView)
因此您可以通过编程方式处理视图层次结构。
也许您可以尝试将 backgroundView 移到情节提要中标签的上方,这样您就可以将它放在后面(因为它在情节提要中是先进先出的)。
或使用sendSubviewToBack(backgroundView)
.
或使用bringSubviewToFront(nameLabel)
.
或view.addSubview(backgroundView)
然后view.addSubview(nameLabel)
。