从嵌套的 UIView 获取框架

Posted

技术标签:

【中文标题】从嵌套的 UIView 获取框架【英文标题】:Getting Frame from Nested UIView 【发布时间】:2015-12-15 01:13:52 【问题描述】:

我有一个 UIButton 嵌套在 2 个 UIStackViews 中,这些 UIStackViews 嵌套在 UIView 中。

我给它限制,但是,当我

print(helloButton.frame)

CGRect 输出的值与屏幕上显示的值不同。

值得注意的是坐标已关闭。

这是有原因的吗?如何准确获取UIButton 帧?

【问题讨论】:

您的布局是否收到有关无法满足约束的警告? @Ares 我添加了一张图片,查看一下。它很容易重现 您在生命周期中何时打印框架? @Ares viewDidAppear。我还尝试了另一个UIButton。同样的事情 看到“查看控制器场景”旁边的黄色右箭头了吗?如果您单击它,它将显示有关您的布局的警告列表。 【参考方案1】:

回答我的问题。 UIView.frameCGRect 在任何时候的坐标原点都是基于其包含UIView的原点,而不是应用程序视图的原点。

为了根据应用程序的原点(绝对左上角)获取其坐标,我这样做了:

在斯威夫特中:

let absoluteFrame = myView.convertRect(myView.frame, toView: nil)

【讨论】:

您还应该在viewDidLayoutSubviews 中进行此转换,而不是在viewDidAppear 中(布局可能尚未在viewDidAppear 中完成)

以上是关于从嵌套的 UIView 获取框架的主要内容,如果未能解决你的问题,请参考以下文章

从嵌套组件中获取 url 参数

如何获取已通过 snapkit 设置的 UIView 的框架

iOS:如何获取刚刚在界面生成器中设置的 UIView 的框架

iOS - 在运行时获取使用 Interface Builder 创建的 UIView 框架

使用iframe框架打开页面(layer.open)并存在嵌套时怎样获取到嵌套内的框架对象?

从 CAAnimation 获取 UIVIew