我的观点层次结构如下所示:(我使用Autolayout
)
ContentView
CustomView
(实施drawRect
)Button
TableView
在drawRect
的{{1}}我通过CustomView
从顶部到底部绘制UIBezierPath
,如果CustomView.SuperView.subViews
是Frame
则在路上,并开始进一步绘制到下一帧,依此类推。
在Startup
调用DrawRect
时,Views
未完成布局我猜,因为我从视图中获取的帧不正确。
如果我致电
,问题就解决了customView.setNeedsLayout()
customView.layoutIfNeeded()
ViewDidAppear
方法中的。但这会影响性能,因为它会被调用两次。 什么是正确的方法?
答案 0 :(得分:1)
您的方法违反了原则tell, don't ask。你应该告诉你的观点在哪里画;它不应该询问 ing。
内部CustomView
:
self.superview
的任何来电。@property NSArray *framesToSkip
)drawRect:
中查看您需要的信息。在视图控制器中:
viewWillLayoutSubviews:
中,使用适当的视图更新自定义视图的framesToSkip
媒体资源。setNeedsDisplay
。一些一般规则,如果损坏,表示您可能违反了告诉,请不要问:
superview
。parentViewController
或presentingViewController
。