调整NSView的大小以适应子视图

时间:2011-04-05 05:13:26

标签: objective-c cocoa nsscrollview

我在使用PXListView和NSScrollView设置很好地工作时遇到了极大的困难。 这是它的要点:

我有一个包含2个PXListViews的仪表板页面。其中一个从Core Data获取数据,另一个从RSS Feed获取。这两个都被添加到superview和相关的控制器(我有Dashboard以外的模式,所以这是最有效的方式)。 这个superview成为我的NSScrollView的documentView。

除了使用基于RSS Feed的List View之外,我可以很好地完成所有这些工作。 我异步获取提要,因此它不会阻止用户界面,一旦收到提要并填充了列表视图,我就会自动调整自身大小。 这一切都很好,但是我需要调整我的仪表板视图的大小以使滚动条向上移动。所以我发送一个通知,导致我创建的autosizeView方法,但一切都下地狱。

两个ListView开始重叠,顶部的内容最后一个在底部。下面的截图(红色是边界矩形,蓝色是每个子视图的框架)

这是在调用autosizeView:enter image description here

之前

这是在调用之后: enter image description here

为了更好的衡量,如果我调整PXListViews并且不调用DashboardView的自动调整方法,这就是它的样子: enter image description here

正如你所看到的,只要我不调用autosizeViews它就可以正常运行,但是我没有得到滚动条。这是我的autosizeView方法:

-(void)autosizeView
{
    //Resize the view to accommodate all subviews
    NSRect oldFrame = [[self view] frame];
    CGFloat lastY = [_activityView frame].origin.y;
    if (lastY < 0) {
        CGFloat newHeight = oldFrame.size.height + (-lastY);
        [[self view] setFrameSize:NSMakeSize(oldFrame.size.width, newHeight)];
    }
}

我猜这个整个事情与我调整DashboardView的大小时坐标被搞乱有关,导致其子视图的起源出错。

任何帮助将不胜感激!!!

1 个答案:

答案 0 :(得分:0)

好吧,我最终解决了它。 由于PXListView在超级视图调整大小时自动改变高度,因此引起的故障已经引起。快速更改使用setAutoresizeMask:只需要它。 它总是很简单嘿?