ios - 当我添加 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
}
有人可以帮我弄这个吗?任何帮助将不胜感激。
解决方案
这里
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)
您将选择器的底部设置为使其位于其下方的主标签的底部,因此删除选择器的底部约束并给它一个高度约束
推荐阅读
- javascript - 如何从 api 查看商品并将商品添加到购物车
- javascript - 在 Angular 5 中使用 sessionStorage 打开私有窗口
- asp.net - 从一个 api 到另一个 api 进行 Http 调用
- php - 在 PHP 中将关联数组推入另一个数组
- flask - 如何从主 app.py 文件导入 MySQL?循环导入问题
- c# - 无法加载 DLL 'Magick.NET-Q16-x86.Native.dll':找不到指定的模块
- php - 我应该如何重写此方法以获取更多参数
- python - python如何处理产生的字典
- javascript - function foo({ defaultValue = {} } = {}) 中的语法是什么意思?
- swift - 在字符串 Swift 中为单个字符设置动画