首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >图层的UIView的子层在Storyboard中显示为@IBDesignable,但在模拟器中不显示

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

Stack Overflow用户
提问于 2014-09-13 09:51:10
回答 1查看 2K关注 0票数 2

我有一个附加在UIView层的子层的UIView。UIView有@IBDesignable-标记,并在故事板中显示得很好。

但是,如果我在模拟器中启动应用程序,子层就不会出现。我没有收到任何错误信息,子层没有显示。

有没有人知道我如何调试这个问题,或者关于原因的任何其他想法?我试着用调试器工具栏中的新“debugger层次结构”-Button来调试它,但不幸的是它只显示视图而没有显示层!

这是我的配置:

  • Xcode 6黄金大师
  • UIView-代码在Swift中
  • iOS 8

在dropbox中,您可以找到Xcode-project:https://www.dropbox.com/s/uejq7j74qyx715x/ArcProblem.zip?dl=0

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

EN

回答 1

Stack Overflow用户

发布于 2014-09-22 16:20:24

问题终于解决了:我用苹果开了一个TSI。从我的角度来看,这是一个编程错误。请在这里找到苹果公司提供的答案:

您不应该使用视图框架来计算子视图的位置。实际上,您不应该从视图本身访问视图的框架。相反,使用边界属性,该属性在当前视图的坐标空间中返回值。有关更多信息,请参见iOS视图编程指南

所以这句话:

代码语言:javascript
复制
circleLayer.position = CGPoint(x:CGRectGetMidX(frame), y:frame.origin.y + frame.height - radius - dy)

应成为:

代码语言:javascript
复制
circleLayer.position = CGPoint(x:CGRectGetMidX(bounds), y:bounds.origin.y + bounds.height - radius - dy)

此外,您不应该在只在视图加载时调用一次的函数中定位和调整子视图的大小。视图大小可以而且确实在加载后(例如在旋转期间)发生更改。您的视图应该是覆盖-layoutSubviews并将circleLayer定位在那里。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25821962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档