IOS 8:图层的UIView的子图层在Storyboard中显示为@IBDesignable,但不在模拟器中

时间:2014-09-13 09:51:11

标签: uiview calayer ios8

我有UIView,其子图层附加到UIView层。 UIView有@ IBDesignable标签,完美地显示在故事板中。但是,如果我在模拟器中启动应用程序,则子层不会显示。我没有收到任何错误消息,子层也没有显示。有没有人知道如何调试这个问题或任何其他关于原因的想法?我尝试使用调试器工具栏中的新"调试视图层次结构" -Button调试它,但遗憾的是它只显示视图而不显示图层!

这是我的配置: - Xcode 6 Golden Master - UIView代码在Swift中 - IOS 8

在dropbox中你可以找到Xcode项目: https://www.dropbox.com/s/uejq7j74qyx715x/ArcProblem.zip?dl=0

导致问题的视图称为" RotateMeterView.swift"

提前致谢

马库斯

1 个答案:

答案 0 :(得分:4)

问题终于解决了:我用苹果开了一个TSI。它出来了,这是我编程错误。请在这里找到Apple提供的答案:

您不应该使用视图来计算子视图的位置。实际上,您永远不应该从视图本身访问视图的框架。而是使用bounds属性,该属性返回当前视图坐标空间中的值。有关详细信息,请参阅View Programming Guide for iOS

所以这一行:

circleLayer.position = CGPoint(x:CGRectGetMidX(frame), y:frame.origin.y + frame.height - radius - dy)

应该成为:

circleLayer.position = CGPoint(x:CGRectGetMidX(bounds), y:bounds.origin.y + bounds.height - radius - dy)

此外,您不应该在仅在视图加载时调用一次的函数中定位和调整子视图大小。视图尺寸可以在加载后(例如在旋转期间)发生变化。您的观点应该覆盖-layoutSubviews并将circleLayer定位在那里。