如何在使用AutoLayout时覆盖NSScrollView的-tile

时间:2015-06-01 07:13:33

标签: objective-c macos cocoa autolayout nsscrollview

我在做什么

我有一个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相对较新。每年左右我都会尝试采用它,最终我会遇到这样的头痛,迫使我放弃它。这一次,我真的很想尝试该死的东西。

0 个答案:

没有答案