Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa NSScrollView从documentView的中间开始_Cocoa_Nsview_Nsscrollview - Fatal编程技术网

Cocoa NSScrollView从documentView的中间开始

Cocoa NSScrollView从documentView的中间开始,cocoa,nsview,nsscrollview,Cocoa,Nsview,Nsscrollview,我有以下代码: [[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++) { Tick

我有以下代码:

[[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]];
}
[[ticketsListScrollView documentView]setFrame:NSMakeRect(0,0[ticketsListScrollView frame].size.width,53*[tickets count]);
[[ticketsListScrollView documentView]设置翻转:是];
对于(int i=0;i<[票数];i++){
TicketsListViewController*viewController=[[TicketsListViewController alloc]initWithNibName:@“TicketsListViewController”bundle:nil];
viewController.dateLabelText=票证[i][@“日期”];
viewController.timeLabelText=票证[i][@“time”];
viewController.subjectLabelText=票证[i][@“标题”];
NSRect frame=[[viewController视图]frame];
frame.origin.y=frame.size.height*i;
[viewController视图].frame=frame;
[[ticketsListScrollView文档视图]添加子视图:[viewController视图]];
}
如果列表足够大(很多视图),则
NSScrollView
从左上角开始,这很好。对于较少的视图(视图不包含整个
documentView
,则
NSScrollView
从中间开始

知道为什么吗


谢谢!

视图在默认情况下不翻转,这意味着您的文档视图被固定在滚动视图的左下角(默认的非翻转视图原点)。您看到的是一个高度不足以推动“顶部”的视图子视图到滚动视图的顶部。我看到您尝试翻转此视图,因此您已经知道了这一点,但操作不正确

我不确定为什么在调用
-setFlipped:
时没有收到错误或警告,因为
isFlipped
属性是只读的。在您的文档视图(滚动的视图,以及您正在其中放置所有这些子视图)中,您可以覆盖它:

- (BOOL)isFlipped {
    return YES;
}

当然,如果不在运行时创建滚动视图,则必须将其放入自定义NSView子类中,并在IB中将其设置为滚动视图的文档视图类。您还需要调整用于布局的框架,因为您当前在滚动视图框架的坐标系中表达它们。您应该在容器/布局视图的边界坐标(也将被翻转)可能与滚动视图的坐标不同。您还需要实现-intrinsicContentSize(并在添加/删除子视图时调用-invalidateIntrinsicContentSize)因此,“自动布局”可以适当调整容器的大小。

请注意格式设置(以及发布完成)代码-这需要其他人更加努力地工作来帮助您。我想您只是忘记了在if条件的右括号中粘贴并添加了它,猜测这就是代码的结尾。如果我错了,请纠正我。这听起来很复杂,即使我只需要滚动视图中的视图列表(类似于一列表,但没有
NSTableView
hassle)。如果所有子视图的维度相同,则基于视图的表视图绝对更容易。但是,如果视图的高度不同(特别是基于不同的宽度),您可能会发现当前的方法更简单。翻转坐标其实并没有那么难,尽管听起来很难。再看一下Cocoa绘图指南中对视图坐标系和“翻转”的解释,以获得更新。它只是代码中的一个轻微的y原点/级数调整。