NSScrollView跳转,在底部添加填充

时间:2012-10-02 19:56:10

标签: objective-c macos cocoa nsscrollview

我在Mac应用程序中有一个NSScrollView,我正在迭代地添加(相同)子视图。但是,当窗口出现时,滚动视图的底部是可见的,但滚动条位于顶部。向上或向下滚动最初会导致滚动视图快速跳转到某个位置,然后它将平滑滚动。此外,它似乎在底部添加了一个大的空白空间,但这可能只是我的代码。

    for (int i=0; i<[userList count]; i++) {  ///user list is an array of ID strings
    PaneViewController *pane = [[PaneViewController alloc] initWithNibName:@"PaneViewController" bundle:nil];
    [pane setPaneID:[userList objectAtIndex:i]];
    pane.view.frame = CGRectMake(0, (i*pane.view.frame.size.height), pane.view.frame.size.width, pane.view.frame.size.height);
    [self.scrollView.contentView addSubview:pane.view];
}
[self.scrollView.documentView setFrame:CGRectMake(0, 0, self.scrollView.frame.size.width, ([userList count])*125)]; /// 125 is the height of the paneView
[self.scrollView.verticalScroller setFloatValue:0.0];

时显示相同的行为
[self.scrollView.contentView addSubview:pane.view];

更改为

[self.scrollView.documentView addSubview:pane.view];

最后,虽然我没有测试它,因为视图是相同的,但我的直觉告诉我这将从下到上填充,即[userList objectAtIndex:0]将被分配到底部的视图列表,因为Cocoas whacky坐标系。这是真的,如果是这样,我该如何解决?

P.S。 - 滚动视图在Interface Builder中设置,如果重要的话。此外,出于多种原因,使用NSListView而不是NSScrollView实际上并不是一种选择。

1 个答案:

答案 0 :(得分:0)

  • 您在哪里初始化上述代码?
  • 您是否尝试过setFlipped:YES或覆盖isFlipped:并在所有自定义视图中返回 YES
  • 替换

      

    [self.scrollView.verticalScroller setFloatValue:0.0];

  •   
  用

[self.scrollView reflectScrolledClipView:self.scrollView.contentView];
  • 您想将子视图添加到文档视图中。
  • 您是否在视图上尝试过setAutoResizeMask?