IOS 8:层的子层';s UIView在故事板中显示为@IBDesignable,但在模拟器中不显示

IOS 8:层的子层';s UIView在故事板中显示为@IBDesignable,但在模拟器中不显示,uiview,calayer,ios8,Uiview,Calayer,Ios8,我有一个子层附加到UIView层的UIView。UIView有@IBDesignable标记,并在情节提要中完美显示。但是,如果我在模拟器中启动应用程序,则子层不会显示。我没有收到任何错误消息,子层只是不显示。有人知道我如何调试这个问题吗?或者有人知道原因吗?我试图用调试器工具栏中的新“调试视图层次结构”按钮调试它,但不幸的是,它只显示视图而不显示层 以下是我的配置: -Xcode 6黄金大师 -UIView代码为Swift格式 -IOS 8 在dropbox中,您可以找到Xcode项目: 导

我有一个子层附加到UIView层的UIView。UIView有@IBDesignable标记,并在情节提要中完美显示。但是,如果我在模拟器中启动应用程序,则子层不会显示。我没有收到任何错误消息,子层只是不显示。有人知道我如何调试这个问题吗?或者有人知道原因吗?我试图用调试器工具栏中的新“调试视图层次结构”按钮调试它,但不幸的是,它只显示视图而不显示层

以下是我的配置: -Xcode 6黄金大师 -UIView代码为Swift格式 -IOS 8

在dropbox中,您可以找到Xcode项目:

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

提前谢谢


马库斯

问题终于解决了:我和苹果一起开了一个TSI。结果是,这是我这一部分的编程错误。请在这里找到苹果提供的答案:

不应使用图幅来计算子视图的位置。事实上,您永远不应该从视图本身中访问视图的框架。相反,请使用bounds属性,该属性返回当前视图坐标空间中的值。有关更多信息,请参阅

所以这一行:

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定位在那里。

问题终于解决了:我用apple打开了一个TSI。结果是,这是我这一部分的编程错误。请在这里找到苹果提供的答案:

不应使用图幅来计算子视图的位置。事实上,您永远不应该从视图本身中访问视图的框架。相反,请使用bounds属性,该属性返回当前视图坐标空间中的值。有关更多信息,请参阅

所以这一行:

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定位在那里。

我遇到了完全相同的问题。你找到解决办法了吗?我遇到了完全相同的问题。您找到解决方案了吗?您所说的覆盖
-layoutSubviews
并将CALayer放置在那里的内容在数小时的搜索后拯救了我。非常感谢!彼此彼此。祝你永生你所说的覆盖
-layoutSubviews
并将CALayer定位在那里的话救了我几个小时的搜索。非常感谢!彼此彼此。祝你永生