创建约束时,受约束UI元素的框架和边界似乎没有立即更新。
NSLayoutConstraint.activate([
counterLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor),
counterLabel.topAnchor.constraint(equalTo: timeLabel.bottomAnchor, constant: view.frame.size.height/100),
counterLabel.widthAnchor.constraint(equalToConstant: view.frame.size.width/1.2),
gameButton.heightAnchor.constraint(equalToConstant: (view.bounds.size.height-counterLabel.frame.maxY)) // THIS DOES NOT WORK
事实证明,尽管为counterLabel创建了约束,但它的框架和边界仍然是(0,0,0,0)。我发现有效的解决方案是将gameButton的高度锚放在viewDidLayoutSubviews中。
为什么会这样呢?我试着寻找其他的线程和文档,但是没有找到太多。
2条答案
按热度按时间oxcyiej71#
例如,在使用框架或边界之前写入layoutIfNeeded()
现在框架和边界返回真值
在您的情况下,可能需要设置约束,然后计算它们并将约束存储在变量中。
dwbf0jvd2#
您不应尝试根据随时间变化的值将按钮高度设置为常量,而应设置按钮的顶部锚点和底部锚点,以便其高度能够相应地进行调整。
替换:
比如说: