Ios 获取子视图’;窗口中的s帧不存在’;t导航栏帐户

Ios 获取子视图’;窗口中的s帧不存在’;t导航栏帐户,ios,uiview,Ios,Uiview,我使用以下代码在窗口中获取UIView子视图的帧: viewToTapOutsideOf.superview!.convertRect(viewToTapOutsideOf.frame, toView: UIApplication.sharedApplication().keyWindow!.rootViewController!.view) 但是,当我通过在视图控制器的视图中添加子视图对其进行测试时: let testView = UIView(frame: rectToTapOutside

我使用以下代码在窗口中获取UIView子视图的帧:

viewToTapOutsideOf.superview!.convertRect(viewToTapOutsideOf.frame, toView: UIApplication.sharedApplication().keyWindow!.rootViewController!.view)
但是,当我通过在视图控制器的视图中添加子视图对其进行测试时:

let testView = UIView(frame: rectToTapOutsideOf)
testView.backgroundColor = UIColor.redColor().colorWithAlphaComponent(0.5)

view.addSubview(testView)
子视图将添加类似于导航栏高度的内容,并添加到框架的y轴上

起初我认为这可能与布局指南有关,但打印长度等于零:

print("\(topLayoutGuide.length)”)
视图控制器包含在UINavigationController中(如果这对任何人都有帮助的话)

提前谢谢


更新:测试后,框架被导航栏高度和状态栏高度偏移

,看起来您正在将其转换为rootViewController的视图,该视图可能是导航控制器视图。这与您正在使用的视图不同,该视图可能被推到导航控制器上。您需要转换到实际将子视图添加到的视图。如何在保持横向工作能力的同时进行转换?如果您在根视图控制器的视图层次结构中执行所有这些操作,则设备方向应该是无关的。好的,感谢您的帮助。我会尝试一下,让你知道它是如何运行的。你的方法非常有效,谢谢