我正在尝试使用自动布局以编程方式创建一个 UIView
并将 UILabel
作为 subview 。
约束
我在 view
上使用了以下约束:
CenterX 到
fastAttacksContainerView
(superview)。常量 8 对父 View 的上层约束。
然后创建一个
label
,它是view
的 subview ,并为 Top、Bottom 添加常量 8 的约束、左和右以查看
。
view
的 问题
view
仅根据标签的frame 调整大小,不考虑所有 4 个边上常量 8 的 4 个约束。这会导致 label
部分显示在 view
之外。
let view = UIView()
view.backgroundColor = pokemon.secondaryColor
let label = UILabel()
fastAttacksContainerView.addSubview(view)
view.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(label)
label.translatesAutoresizingMaskIntoConstraints = false
label.text = fa
let gest = UITapGestureRecognizer(target: self, action: #selector(self.selectFastAttack))
view.addGestureRecognizer(gest)
fastAttackButtons.append(view)
fastAttackLables.append(label)
let top = NSLayoutConstraint(item: view, attribute: .Top, relatedBy: .Equal, toItem: fastAttacksContainerView, attribute: .Top, multiplier: 1, constant: 8)
let centerX = NSLayoutConstraint(item: view, attribute: .CenterX, relatedBy: .Equal, toItem: fastAttacksContainerView, attribute: .CenterX, multiplier: 1, constant: 0)
let labLeft = NSLayoutConstraint(item: label, attribute: .Left, relatedBy: .Equal, toItem: view, attribute: .Left, multiplier: 1, constant: 8)
let labTop = NSLayoutConstraint(item: label, attribute: .Top, relatedBy: .Equal, toItem: view, attribute: .Top, multiplier: 1, constant: 8)
let labRigth = NSLayoutConstraint(item: label, attribute: .Right, relatedBy: .Equal, toItem: view, attribute: .Right, multiplier: 1, constant: 8)
let labBottom = NSLayoutConstraint(item: label, attribute: .Bottom, relatedBy: .Equal, toItem: view, attribute: .Bottom, multiplier: 1, constant: 8)
view.addConstraints([labLeft, labTop, labRigth, labBottom])
fastAttacksContainerView.addConstraints([top, centerX])
输出
最佳答案
view
高度不明确。
您应该为 view
的高度或它到 fastAttacksContainerView
底部的距离添加约束。
关于ios - Autolayout - UIView 不能正确调整到 subview 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38937479/