获取隐藏的,动态填充的UIView的高度

时间:2015-01-12 22:54:04

标签: ios swift uiview ios8

我正在尝试获取从用户永远不会看到的xib加载的特定UIView的“屏幕截图”。

以下是代码:

let nibViews = NSBundle.mainBundle().loadNibNamed("CardView", owner: ownedBy, options: nil)
if let cardView = nibViews.first as? CardView {
    UIGraphicsBeginImageContextWithOptions(cardView.bounds.size, false, UIScreen.mainScreen().scale)
    cardView.drawViewHierarchyInRect(cardView.bounds, afterScreenUpdates: true)
    let imageAgain = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
}
//do something with image

我遇到的问题是当我将它们传递给UIGraphicsBeginImageContextWithOptions时,cardView的界限是不正确的。具体来说,高度不正确。如果我在UIGraphicsBeginImageContextWithOptions之前打印(cardView.bounds.size.height),我得到一个高度的通用“600”...这会扭曲创建的图像。

我找到了一个“解决方案”,但不是我感觉舒服的东西 - 如果我调用UIGraphicsBeginImageContextWithOptions代码块TWICE,在第二遍,cardView.bounds.size.height返回基于的CORRECT高度内容添加到cardView(也考虑到xib上的约束)

似乎正在发生的事情是,在调用drawViewHierarchyInRect一次之前,cardView的真实布局尚未完全实现。

我的问题是 - drawViewHierarchyInRect做什么使cardView报告正确的高度?我可以通过一些单独的功能以某种方式做那件事,而不创建UIView的2个屏幕截图吗?

0 个答案:

没有答案