我需要一些关于如何为动态添加的 UILabel 添加约束的建议
假设我有一个名为 (A) 的 UIView 添加到 UIViewcontroller View 中,大小为 (screenwidth, 200)。在 View A 上,我已使用 super View 在其前缘和后缘上设置了自动调整大小掩码。
现在在运行时,我正在添加带有字符串中的字符的 UILabel。例如,如果字符串是“HELLO”,我将为 HELLO 中的每个字符以等间隔添加五个 UILabel。
当方向从纵向变为横向时,UILabel 的间距不均匀。我没有对 UILabel 设置任何约束,需要一些关于如何添加约束的建议。
除了约束之外,是否还有其他解决方案可以使 UILabel 在横向和纵向模式下均匀分布?
谢谢
最佳答案
我可以推荐使用 UIStackView
。 Sweeper 的解决方案没有使用动态添加到屏幕,所以我想我会提供一个程序化的解决方案。
要动态添加这些,请使用以下示例。
首先:
@IBOutlet weak var containerView: UIView!
这应该是您描述中的 View A,并确保将其与 Storyboard联系起来。
要添加标签,我们首先向容器 View 添加堆栈 View :
let stackView = UIStackView()
stackView.distribution = .fillEqually
stackView.alignment = .fill
stackView.spacing = 15
stackView.autoresizingMask = [.flexibleLeftMargin,.flexibleRightMargin]
containerView.addSubview(stackView)
stackView.centerXAnchor.constraint(equalTo: (stackView.superview?.centerXAnchor)!, constant: 0).isActive = true
stackView.centerYAnchor.constraint(equalTo: (stackView.superview?.centerYAnchor)!, constant: 0).isActive = true
stackView.heightAnchor.constraint(equalTo: (stackView.superview?.heightAnchor)!, constant: 0).isActive = true
stackView.widthAnchor.constraint(equalToConstant: 200).isActive = true
您可以使用宽度 anchor 来获得您想要的内容。
然后当你想添加标签时,使用这个:
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 5, height: 5))
label.text = "E"
stackView.addArrangedSubview(label)
let labelTwo = UILabel(frame: CGRect(x: 0, y: 0, width: 5, height: 5))
labelTwo.text = "L"
stackView.addArrangedSubview(labelTwo)
//... And so on
堆栈 View 可以很容易地添加 subview 而没有太多限制。但是,您必须向堆栈 View 本身添加约束才能在屏幕上显示内容!
希望对您有所帮助。
关于ios - 动态添加的 UIView 的自动布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46284778/