【发布时间】:2023-03-23 22:04:01
【问题描述】:
我正在尝试使用自动布局以编程方式创建 UIView 和 UILabel 作为子视图。
约束
我在view 上使用了以下约束:
CenterX of
view到fastAttacksContainerView(superview)。Top 常量 8 到 superview 的约束。
然后创建了一个
label,它是view的子视图,并为Top、Bottom、Left,以及权利到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])
输出
【问题讨论】:
-
为什么不使用情节提要?
-
上述代码是在运行时获取
views的个数进行迭代的。
标签: ios swift uiview autolayout uilabel