以编程方式将 UIView 放在 UILabel 后面



我想问。我想在uilabel后面做一个UIView,我现在正在从collectionview创建分段Controll。如何在UI标签后面制作UIview? 这是我的代码

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答案,或者你应该注意到苹果提供了2个API,比如:

func sendSubviewToBack(_ view: UIView)

func bringSubviewToFront(_ view: UIView)

因此,您可以通过编程方式处理视图层次结构。

也许您可以尝试将背景视图移动到情节提要中标签上方,以便将其放在后面(因为它在情节提要中先进先出(。

或使用sendSubviewToBack(backgroundView).

或使用bringSubviewToFront(nameLabel).

或者view.addSubview(backgroundView)然后view.addSubview(nameLabel).

最新更新