从嵌套的 UIView 获取框架
Posted
技术标签:
【中文标题】从嵌套的 UIView 获取框架【英文标题】:Getting Frame from Nested UIView 【发布时间】:2015-12-15 01:13:52 【问题描述】:我有一个 UIButton
嵌套在 2 个 UIStackView
s 中,这些 UIStackView
s 嵌套在 UIView
中。
我给它限制,但是,当我
print(helloButton.frame)
CGRect
输出的值与屏幕上显示的值不同。
值得注意的是坐标已关闭。
这是有原因的吗?如何准确获取UIButton
帧?
【问题讨论】:
您的布局是否收到有关无法满足约束的警告? @Ares 我添加了一张图片,查看一下。它很容易重现 您在生命周期中何时打印框架? @AresviewDidAppear
。我还尝试了另一个UIButton
。同样的事情
看到“查看控制器场景”旁边的黄色右箭头了吗?如果您单击它,它将显示有关您的布局的警告列表。
【参考方案1】:
回答我的问题。 UIView.frame
CGRect 在任何时候的坐标原点都是基于其包含UIView
的原点,而不是应用程序视图的原点。
为了根据应用程序的原点(绝对左上角)获取其坐标,我这样做了:
在斯威夫特中:
let absoluteFrame = myView.convertRect(myView.frame, toView: nil)
【讨论】:
您还应该在viewDidLayoutSubviews
中进行此转换,而不是在viewDidAppear
中(布局可能尚未在viewDidAppear
中完成)以上是关于从嵌套的 UIView 获取框架的主要内容,如果未能解决你的问题,请参考以下文章
如何获取已通过 snapkit 设置的 UIView 的框架
iOS:如何获取刚刚在界面生成器中设置的 UIView 的框架
iOS - 在运行时获取使用 Interface Builder 创建的 UIView 框架