我需要一些关于如何为动态添加UILabels添加约束的建议
假设我有一个名为(A)的UIView,其大小(screenwidth,200)被添加到UIViewcontroller视图中。在视图A上,我使用superview在其前缘和后缘上设置了自动调整大小的掩码。
现在,在运行时,我正在添加带有字符串字符的UILabel。例如,如果字符串是“HELLO”,我将以相等的间隔为HELLO中的每个字符添加五个UILabel。
当方向从纵向变为横向时,UILabel的间距不均匀。我没有对UILabels设置任何限制,需要一些关于如何添加约束的建议。
除了可用的限制之外,还有其他任何解决方案可以使UILabel在横向和纵向模式下均匀展开吗?
由于
答案 0 :(得分:1)
我可以推荐使用UIStackView
。 Sweeper的解决方案不是在屏幕上使用动态添加,所以我想我会提供一个程序化的解决方案。
要动态添加这些,请使用以下示例。
首先:
@IBOutlet weak var containerView: UIView!
这应该是您的描述中的视图A,并确保将其与故事板挂钩。
要添加标签,我们首先将堆栈视图添加到容器视图中:
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
你可以使用宽度锚来获得你想要的东西。
然后,当您想要添加标签时,请使用:
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
堆栈视图可以轻松添加子视图而不会有太多限制。但是,您必须向堆栈视图本身添加约束以在屏幕上显示某些内容!
我希望这会有所帮助。
答案 1 :(得分:0)
在iOS 9中,UIStackView
被引入。这是使用它们的绝佳机会!
堆栈视图将对前导,尾随和其他必要属性进行约束,以使其保持在您想要的位置。堆栈视图的分布应该是“Fill Equally”。
在VC中添加插座,并在需要时将标签添加到堆栈视图中!