ios - 新的 view.frame.y 与 label.frame.y 不匹配

标签 ios graphics frame

我在屏幕上有一个标签,其高度设置为 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 中的原始屏幕:

original screen in IB

代码结果(新 View 是半透明的;注意底部的黄色带):

result of the code -- note yellow band at the bottom

最佳答案

您可以通过以下方式查看您的标签位置

let theFrame = view.convert(myLabel.frame, from: your_stack_view_here)

你应该把它移到

viewDidAppear

因为

viewWillLayoutSubviews

将在任何时候调用 subview 布局。这是第一次运行时的想法,你的“mylabel”没有在正确的位置布局。

Apple document

关于ios - 新的 view.frame.y 与 label.frame.y 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42675756/

相关文章:

ffmpeg - 使用 ffmpeg 或其他软件从视频中每个场景变化的中间生成缩略图

ios - ios中文字符编码问题

java - OpenGL JOGL 相机透视

JavaFX 错误报告了我在 Linux 上的屏幕尺寸。这是一个错误吗?

delphi - 创建透明位图并UpdateLayeredWindow

ios - 在自定义 UIView 的 updateConstraint 函数中获取帧大小

java - 为什么我不能通过另一个 jFrame 将项目添加到 jComboBox?

ios - 封闭用户组的iOS应用分发

ios - iOS 7-UITextView剪辑文本

iPhone 5 屏幕调整大小不调整