我在屏幕上有一个标签,其高度设置为 300px,设置为屏幕底部,我想创建一个完全覆盖它的 UIView。我使用的代码是
let theFrame = CGRect(x: myLabel.frame.minX, y: myLabel.frame.minY, width: myLabel.frame.width, height: myLabel.frame.height)
newVu = UIView(frame: theFrame)
let newColor = UIColor(colorLiteralRed: 0.5, green: 0.5, blue: 1, alpha: 0.5)
newVu.backgroundColor = newColor
self.view.addSubview(newVu)
我得到的结果是新的 UIView 比标签高了大约 20 点。 ((编辑:正如 GeorgeGreen 帮助我在评论中看到的那样,这是因为标签位于 Vertical StackView 内,它被限制在顶部布局指南的底部——因此标签的 Y 是相对于 Stack 的顶部 View ,而不是屏幕顶部。))显然,工作中存在不同的引用系,但是需要什么才能将所有内容纳入同一引用系呢?编辑:或者,以另一种方式询问,如何获取标签的“绝对”X 和 Y 坐标 在屏幕中,以便无论它嵌入了多少 View ,我都可以知道将新 View 放到哪里以准确覆盖它?
IB 中的原始屏幕:
代码结果(新 View 是半透明的;注意底部的黄色带):
最佳答案
您可以通过以下方式查看您的标签位置
let theFrame = view.convert(myLabel.frame, from: your_stack_view_here)
你应该把它移到
viewDidAppear
因为
viewWillLayoutSubviews
将在任何时候调用 subview 布局。这是第一次运行时的想法,你的“mylabel”没有在正确的位置布局。
关于ios - 新的 view.frame.y 与 label.frame.y 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42675756/