从 Nib 加载的 UIView,手动调用 autolayout
Posted
技术标签:
【中文标题】从 Nib 加载的 UIView,手动调用 autolayout【英文标题】:UIView loaded from the Nib, manually calling autolayout 【发布时间】:2015-02-20 14:45:58 【问题描述】:我需要从 Nib 加载 UIView 并将其呈现为 PDF(它是发票)。所以我从 Nib 加载自定义 UIView invoiceView
并进行设置(在其中设置各种标签)。
设置标签后,我必须强制视图自行布局,以便各种 UI 元素正确调整大小/重新定位。
调用:
invoiceView.updateConstraints()
什么都不做。
调用:
invoiceView.layoutSubviews()
把一切都搞砸了。
这是我已经尝试过的:
invoiceView
的设置框架(没有任何作用)。
设置框架并将invoiceView
添加到当前视图层次结构中:
self.view.addSubview(invoiceView)
正确设置一切。但是我不想这样做。我想强制视图正确布局(使用布局约束)。我究竟做错了什么?我应该在invoiceView
上调用哪些方法,以便在不将其添加到当前视图层次结构的情况下正确布局?
PS:代码是从内存中输入的。请忽略错别字。
【问题讨论】:
如果您使用自动布局工作,请忘记设置框架。要强制自动布局引擎计算帧,您应该首先标记为需要布局,然后按照 kedzia 所写的那样调用 layoutIfNeeded 我已经说过设置框架没有任何作用。我在这里提到它是为了避免一个班轮提出这样的建议。 【参考方案1】:试试
invoiceView.setNeedsLayout()
invoiceView.layoutIfNeeded()
【讨论】:
上面的代码只会在后台调用layoutSubviews
。就像我上面说的,layoutSubviews
完全搞砸了一切。我认为这是一个框架/边界问题。不过谢谢。
@User123 如果它弄乱了您的代码,则意味着您要应用于视图的布局可能不正确。如果您在视图中看到 ok 但在渲染 PDF 中看不到,情况就不同了
布局正确。如果它不正确,即使它是活动层次结构的一部分,它也会被搞砸。以上是关于从 Nib 加载的 UIView,手动调用 autolayout的主要内容,如果未能解决你的问题,请参考以下文章