BringSubviewToFront无法使用下拉视图(UIView)

时间:2018-09-29 12:08:59

标签: ios swift uiview nslayoutconstraint

我有一个下拉视图(它是一个UIView,其中完全嵌入了UITableView)。顶部锚点以编程方式限制为UIButton的底部锚点,因此,当您触摸按钮时,下拉视图将打开。参见下面的代码

但是,我的问题在于,打开的下拉视图的高度为150,视图中唯一显示的部分是UITableViewCell内部的部分(参见图片),底部隐藏在单元格后面。

func genderDropdownViewConfig() {
    genderDropdownView.backgroundColor = .red
    genderDropdownView.frame = CGRect(x: 0, y: 0, width: 0, height: 0)
    genderDropdownView.translatesAutoresizingMaskIntoConstraints = false
    genderDropdownButton.addSubview(genderDropdownView)
    //genderDropdownButton.bringSubview(toFront: genderDropdownView)
    //tableView.cellForRow(at: IndexPath(row: 2, section: 0))?.superview?.addSubview(genderDropdownView)
    //tableView.cellForRow(at: IndexPath(row: 2, section: 0))?.superview?.bringSubview(toFront: genderDropdownView)

    genderDropdownButton.addSubview(genderDropdownView)
    tableView.bringSubview(toFront: genderDropdownButton)

    genderDropdownView.topAnchor.constraint(equalTo: genderDropdownButton.bottomAnchor).isActive = true
    genderDropdownView.centerXAnchor.constraint(equalTo: genderDropdownButton.centerXAnchor).isActive = true
    genderDropdownView.widthAnchor.constraint(equalTo: genderDropdownButton.widthAnchor).isActive = true
    //genderDropdownHeight = genderDropdownView.heightAnchor.constraint(equalToConstant: 0)
    genderDropdownHeight = genderDropdownView.heightAnchor.constraint(equalToConstant: 0)

    for subview in genderDropdownView.subviews {
        subview.backgroundColor = .clear
    }
}

enter image description here

3 个答案:

答案 0 :(得分:1)

我想问题是出在将layoutDropdownView添加到布局中的方式。

尝试通过以下方式将genderDropdownView添加到单元格的主视图中:

cell.view.addSubview(genderDropdownView)

,然后要求单元格的视图将下拉视图置于最前面。

cell.view.bringSubview(toFront: genderDropdownButton)

答案 1 :(得分:0)

这可能是由于从情节提要中定义图层的方式所致,看来标签“当前权重”正在迫使下拉视图缩小。也许为下拉部分定义一个高度限制?

答案 2 :(得分:0)

您的单元格的高度大小需要通过dropDownView重新定义。看来您的cell contentView的高度与dropDownView的高度没有任何关系,以进行自我调整。

我认为您应该在点击按钮后更新高度。 您可以尝试使用此代码来更新单元格的高度。

cell.contentView.size.height = dropDownView.frame.origin.y + dropDownView.frame.height