首页 > 解决方案 > 当我添加 UIPickerView 时,为什么不相关的自动布局约束会发生变化?

问题描述

当我将图像的选取器视图添加到视图时,它会将不受任何方式约束到选取器视图的其他对象的自动布局约束更改。

在添加选择器视图之前: 前

添加选择器视图后: 后

在这里,我添加了 mainContainer(仅覆盖屏幕的 UIView,除了应用程序标题所在的顶部)和 primaryHeaderLabel(显示“NEW TRAY”的 UILabel)。如您所见,这些自动布局约束都不包含 imagePickerView 中的任何内容,但它们仍在被移动。

view.addSubview(mainContainer)
    mainContainer.setAnchors(top: titleLabel.bottomAnchor, paddingTop: 5, bottom: view.bottomAnchor, paddingBottom: 0, left: view.leftAnchor, paddingLeft: 0, right: view.rightAnchor, paddingRight: 0, centerX: nil, centerY: nil, width: 0, height: 0)

mainContainer.addSubview(primaryHeaderLabel)
    primaryHeaderLabel.setAnchors(top: mainContainer.topAnchor, paddingTop: 20, bottom: nil, paddingBottom: 0, left: mainContainer.leftAnchor, paddingLeft: 40, right: mainContainer.rightAnchor, paddingRight: 40, centerX: nil, centerY: nil, width: 0, height: 0)

以下是与 imagePickerView 相关的代码位。我尝试将选择器视图添加到主视图而不是 mainContainer,但得到了相同的结果:

let imagePickerView: UIPickerView = {
        let pickerView = UIPickerView()
        return pickerView
    }()


let pickerItems: [String] = [
        "pickerPink",
        "pickerBlue",
        "pickerPurple",
        "pickerYellow"
    ]


mainContainer.addSubview(imagePickerView)
    imagePickerView.setAnchors(top: primaryHeaderLabel.topAnchor, paddingTop: 0, bottom: primaryHeaderLabel.bottomAnchor, paddingBottom: 0, left: nil, paddingLeft: 0, right: mainContainer.rightAnchor, paddingRight: 40, centerX: nil, centerY: nil, width: 60, height: 0)
    imagePickerView.delegate = self
    imagePickerView.dataSource = self

Picker 视图委托方法和数据源:

 func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 1
}

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return pickerItems.count
}

func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {

    let view = UIView(frame: CGRect(x: 0, y: 0, width: 30, height: 30))
    let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 30, height: 30))

    imageView.image = UIImage(named: pickerItems[row])

    view.addSubview(imageView)

    return view

}

有人可以帮我弄这个吗?任何帮助将不胜感激。

标签: iosswiftautolayoutuipickerview

解决方案


这里

imagePickerView.setAnchors(top: primaryHeaderLabel.topAnchor, paddingTop: 0, bottom:
primaryHeaderLabel.bottomAnchor, paddingBottom: 0, left: nil, paddingLeft: 0, right: 
mainContainer.rightAnchor, paddingRight: 40, centerX: nil, centerY: nil, width: 60, height: 0)

您将选择器的底部设置为使其位于其下方的主标签的底部,因此删除选择器的底部约束并给它一个高度约束


推荐阅读