2

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 の風変わりな座標のために、これが下から上にいっぱいになる、つまり、リストの一番下のビューに割り当てられることを本能的に教えてくれます。システム。これは本当ですか? もしそうなら、どうすれば修正できますか?

PS - それが重要な場合、スクロール ビューは Interface Builder で設定されます。また、NSScrollView の代わりに NSListView を使用することは、いくつかの理由から実際にはオプションではありません。

4

1 に答える 1

0

  • 上記のコードをどこで初期化していますか?
  • setFlipped:YES または isFlipped: をオーバーライドして、すべてのカスタム ビューでYESを返そうとしましたか?
  • あなたの

    [self.scrollView.verticalScroller setFloatValue:0.0];

[self.scrollView reflectScrolledClipView:self.scrollView.contentView];
  • サブビューをドキュメント ビューに追加します。
  • ビューで setAutoResizeMask を試しましたか?
于 2013-11-04T16:25:14.527 に答える