【问题标题】:NSScrollView jumps around, adds padding at the bottomNSScrollView 左右跳动,在底部添加 padding
【发布时间】:2013-11-05 00:31:30
【问题描述】:

我在 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 古怪的坐标系。这是真的吗?如果是,我该如何解决?

附: - 滚动视图在 Interface Builder 中设置,如果这很重要的话。此外,出于多种原因,使用 NSListView 代替 NSScrollView 并不是一个真正的选择。

【问题讨论】:

    标签: objective-c macos cocoa nsscrollview


    【解决方案1】:

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

      [self.scrollView.verticalScroller setFloatValue:0.0];

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

    【讨论】:

      猜你喜欢
      • 2014-10-11
      • 1970-01-01
      • 1970-01-01
      • 2015-08-25
      • 1970-01-01
      • 2021-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多