NSScrollView 从 documentView 的中间开始
NSScrollView starting at middle of the documentView
我有以下代码:
[[ticketsListScrollView documentView] setFrame: NSMakeRect(0, 0, [ticketsListScrollView frame].size.width, 53 * [tickets count])];
[[ticketsListScrollView documentView] setFlipped:YES];
for(int i = 0; i < [tickets count]; i++) {
TicketsListViewController *viewController = [[TicketsListViewController alloc] initWithNibName:@"TicketsListViewController" bundle:nil];
viewController.dateLabelText = tickets[i][@"date"];
viewController.timeLabelText = tickets[i][@"time"];
viewController.subjectLabelText = tickets[i][@"title"];
NSRect frame = [[viewController view] frame];
frame.origin.y = frame.size.height * i;
[viewController view].frame = frame;
[[ticketsListScrollView documentView] addSubview:[viewController view]];
}
如果列表足够大(很多视图),NSScrollView
从左上角开始,这很好。对于less views(views不占全documentView
,则NSScrollView
从中间开始。
知道为什么吗?
谢谢!
视图默认不翻转,这意味着您的文档视图被固定到滚动视图的左下角(默认的非翻转视图原点)。您看到的视图不够高,无法将 "top" 子视图推到滚动视图的顶部。我看到你试过翻转这个视图,所以你已经知道了,但是你没有做对。
我不确定为什么您在调用 -setFlipped:
时没有收到错误或警告,因为 isFlipped
属性 是只读的。在您的文档视图(滚动的视图,以及您放置所有这些子视图的视图)中,您可以覆盖它:
- (BOOL)isFlipped {
return YES;
}
当然,如果您不是在运行时创建它,则必须将其放入自定义 NSView 子 class 并将其设置为滚动视图的文档视图 class 在 IB 中。您还需要调整用于布局的框架,因为您当前是在滚动视图框架的坐标系中表达它们。您应该在 container/layout 视图的 bounds 坐标中表达它们,该坐标也会翻转,因此可能与滚动视图的坐标不同。您还需要实施 -intrinsicContentSize(并在 adding/removing 子视图时调用 -invalidateIntrinsicContentSize)以便自动布局可以适当调整容器的大小。
我有以下代码:
[[ticketsListScrollView documentView] setFrame: NSMakeRect(0, 0, [ticketsListScrollView frame].size.width, 53 * [tickets count])];
[[ticketsListScrollView documentView] setFlipped:YES];
for(int i = 0; i < [tickets count]; i++) {
TicketsListViewController *viewController = [[TicketsListViewController alloc] initWithNibName:@"TicketsListViewController" bundle:nil];
viewController.dateLabelText = tickets[i][@"date"];
viewController.timeLabelText = tickets[i][@"time"];
viewController.subjectLabelText = tickets[i][@"title"];
NSRect frame = [[viewController view] frame];
frame.origin.y = frame.size.height * i;
[viewController view].frame = frame;
[[ticketsListScrollView documentView] addSubview:[viewController view]];
}
如果列表足够大(很多视图),NSScrollView
从左上角开始,这很好。对于less views(views不占全documentView
,则NSScrollView
从中间开始。
知道为什么吗?
谢谢!
视图默认不翻转,这意味着您的文档视图被固定到滚动视图的左下角(默认的非翻转视图原点)。您看到的视图不够高,无法将 "top" 子视图推到滚动视图的顶部。我看到你试过翻转这个视图,所以你已经知道了,但是你没有做对。
我不确定为什么您在调用 -setFlipped:
时没有收到错误或警告,因为 isFlipped
属性 是只读的。在您的文档视图(滚动的视图,以及您放置所有这些子视图的视图)中,您可以覆盖它:
- (BOOL)isFlipped {
return YES;
}
当然,如果您不是在运行时创建它,则必须将其放入自定义 NSView 子 class 并将其设置为滚动视图的文档视图 class 在 IB 中。您还需要调整用于布局的框架,因为您当前是在滚动视图框架的坐标系中表达它们。您应该在 container/layout 视图的 bounds 坐标中表达它们,该坐标也会翻转,因此可能与滚动视图的坐标不同。您还需要实施 -intrinsicContentSize(并在 adding/removing 子视图时调用 -invalidateIntrinsicContentSize)以便自动布局可以适当调整容器的大小。