我有一个NSScrollView子类。在其中,我重写tile
方法以将contentView的帧高度降低1,以便我可以自定义绘制顶部边框(如下所述:NSScrollView: fade in a top-border like Messages.app)
- (void) tile { id contentView = [self contentView]; [super tile]; NSRect newRect = [contentView frame]; newRect.size.height -= 1.0f; newRect.origin.y += 1.0f; [contentView setFrame:newRect]; }
启用AutoLayout后,我收到以下消息:
调用后仍需要更新布局 - [LPAutoBorderScrollView布局]。 LPAutoBorderScrollView或其中一个超类可能已重写-layout而不调用super。或者,在更新它的过程中可能会出现脏的布局。两者都是Cocoa Autolayout中的编程错误。如果一些pre-Cocoa Autolayout类有一个名为layout的方法,那么很可能会出现前者,但应该修复它。
并且scrollView将无法正确滚动。尝试这样做会导致一些闪烁(就像clipView稍微移动其内容然后将其反弹回来一样)
显然,[super tile]
正在触发layout
,我对contentView
框架的后续修改符合“在更新过程中弄脏布局”。
那么,我该如何妥善处理这个布局问题呢?
注意:我对AutoLayout相对较新。每年左右我都会尝试采用它,最终我会遇到这样的头痛,迫使我放弃它。这一次,我真的很想尝试该死的东西。