为什么在添加UIPickerView时不相关的自动布局约束会改变?

问题描述 投票:0回答:1

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

添加选择器视图之前:before

添加选择器视图后:after

[在这里,我添加了mainContainer(仅覆盖屏幕的UIView,除了应用程序标题所在的顶部)和primaryHeaderLabel(UILabel上显示“ NEW TRAY”)。如您所见,这些自动布局约束都没有包含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

选择器视图委托方法和数据源:

 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

}

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

ios swift autolayout uipickerview
1个回答
2
投票

这里

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)

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

© www.soinside.com 2019 - 2024. All rights reserved.