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

Swift 以编程方式将UIView放置在UILabel后面,swift,autolayout,Swift,Autolayout,我想问一下。我想在uilabel后面创建一个UIView,我正在从collectionview创建分段控件。如何在uilabel后面创建uiview? 这是我的密码 nameLabel.translatesAutoresizingMaskIntoConstraints = false addSubview(nameLabel) NSLayoutConstraint.activate([ nameLabel.topAnchor.constra

我想问一下。我想在uilabel后面创建一个UIView,我正在从collectionview创建分段控件。如何在uilabel后面创建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

视图将从后面添加到前面。只需在
添加子视图(新标签)
之前添加子视图(背景视图)

像这样的方法应该会奏效:

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)
])

视图将从后面添加到前面。只需在
添加子视图(新标签)
之前添加子视图(背景视图)

像这样的方法应该会奏效:

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)

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

也许你可以尝试将背景视图移到故事板标签上方,这样你就可以将它放在后面(因为它是故事板中的先入先出)

或者使用
sendSubviewToBack(backgroundView)

或者使用
将SubviewToFront(名称标签)


或者
view.addSubview(backgroundView)
然后
view.addSubview(namelab)
您可以使用@Vacawama答案,或者您应该注意到苹果提供了两种API,如:

func sendSubviewToBack(_ view: UIView)

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

也许你可以尝试将背景视图移到故事板标签上方,这样你就可以将它放在后面(因为它是故事板中的先入先出)

或者使用
sendSubviewToBack(backgroundView)

或者使用
将SubviewToFront(名称标签)

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