后续布局后UIView框架负原点

Posted

技术标签:

【中文标题】后续布局后UIView框架负原点【英文标题】:Negative origin of frame of UIView after subsequent layout 【发布时间】:2017-09-05 17:58:37 【问题描述】:

我在第二个和后续布局中得到一个 frame = (-335 -560; 375 608),其中原点变为负数 (-335,-560)。这会导致视图被画出屏幕。这个视图是 UIViewController 的根视图。该视图由 10 个垂直约束的子视图组成,就像在垂直轴堆栈视图中一样。我将最高子视图的顶部锚点约束到该视图的顶部锚点。

我不知道如何将此视图的顶部锚点限制在 (0,0) 原点。我做错了什么?

【问题讨论】:

除非你用自定义容器视图控制器做一些非常奇怪的事情,否则你的视图控制器的框架应该由它的父视图控制器控制(如果你的视图控制器是窗口的根视图控制器,它应该具有与窗口相同的框架)。如果您的视图控制器的原点变为负数,请查看父级。你的父视图控制器是什么? 根视图控制器是一个UINavigationController,它是这个视图控制器的父级。当我推送一个视图控制器,然后弹出它时,我的视图会得到这个奇怪的框架。 还有一件奇怪的事情:在新的视图控制器出现之前,我可以看到我的旧视图改变了它的框架。 您是否在 Storyboard / IB 中展示您的观点?还是您通过代码添加“10 个垂直约束的子视图” 以编程方式 - 我必须这样做,因为视图数量是动态的。但是,第一次正确布局子视图。 【参考方案1】:

正确的方法是将自己的自定义视图作为子视图添加到默认视图控制器视图,并将自定义视图的位置锚绑定到该视图。

【讨论】:

【参考方案2】:

检查 Super view 是否约束其框架是否具有负原点并将对应视图的间距设置为零 superview 。参考图片附件 enter image description here

【讨论】:

以上是关于后续布局后UIView框架负原点的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 运行时更改自动布局约束的 UIView 的框架

UIScrollView 缩小具有 -ve 原点的视图

以编程方式创建的 UIView 的框架为 0

自动布局:窗口调整大小时如何更改框架的原点?

UIKit框架屏幕适配

用于直接设置原点和大小的 UIView 类别