Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 获取隐藏的、动态填充的UIView的高度_Ios_Swift_Uiview_Ios8 - Fatal编程技术网

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

Ios 获取隐藏的、动态填充的UIView的高度,ios,swift,uiview,ios8,Ios,Swift,Uiview,Ios8,我试图获得一个特定UIView的“屏幕截图”,该视图从用户永远看不到的xib加载 代码如下: let nibViews = NSBundle.mainBundle().loadNibNamed("CardView", owner: ownedBy, options: nil) if let cardView = nibViews.first as? CardView { UIGraphicsBeginImageContextWithOptions(cardView.bounds.size

我试图获得一个特定UIView的“屏幕截图”,该视图从用户永远看不到的xib加载

代码如下:

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
我遇到的问题是,当我将cardView边界传递到UIGraphicsBeginImageContextWithOptions时,它们是不正确的。具体来说,高度不正确。如果我在UIGraphicsBeginImageContextWithOptions之前打印LN(cardView.bounds.size.height),我会得到高度的通用“600”。。。这会扭曲创建的图像

我确实找到了一个“解决方案”,但这不是我感到舒服的东西——如果我调用UIGraphicsBeginImageContextWithOptions代码块两次,在第二次调用时,cardView.bounds.size.height会根据添加到cardView的内容返回正确的高度(同时考虑到xib上的约束)

似乎正在发生的是,在调用drawViewHierarchyInRect一次之前,cardView的真正布局并没有完全实现


我的问题是-drawViewHierarchyInRect如何使cardView报告正确的高度?我是否可以通过一些单独的功能来实现这一点,而不创建UIView的两个屏幕截图?

问题在于,视图控制器的子视图有机会相对于视图进行布局,因为它们尚未添加到视图中。若尝试在if块的开头添加cardView.view.layoutSubviews()会发生什么情况?实际上。。。我建议将loadNibNamed添加为子视图,但将其隐藏,以便它有机会根据视图布局其子视图。我已经尝试了这两种方法。将cardView添加到子视图中会执行某些操作。。。它返回的高度与600不同,返回的高度为58,但卡的实际高度实际上是341。所以,这以不同的方式扭曲了它。哦,那么CardView是视图控制器还是其他什么?你如何设置它的高度?在故事板中或以编程方式?cardView是从xib加载的UIView。在该xib文件中,我有一系列影响布局的不同约束。