gpt4 book ai didi

cocoa - NSScrollView 从 documentView 的中间开始

转载 作者:行者123 更新时间:2023-12-03 17:10:47 28 4
gpt4 key购买 nike

我有以下代码:

[[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]];
}

如果列表足够大(许多 View ),NSScrollView 从左上角开始,这很棒。对于较少的 View ( View 不占用整个 documentView,则 NSScrollView 从中间开始。

知道为什么吗?

谢谢!

最佳答案

默认情况下, View 不会翻转,这意味着您的文档 View 被固定到 ScrollView 的左下角(默认的非翻转 View 原点)。您看到的是一个 View 不够高,无法将“顶部” subview 推到 ScrollView 的顶部。我看到您尝试翻转此 View ,因此您已经知道这一点,但您做得不正确。

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

- (BOOL)isFlipped {
return YES;
}

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

关于cocoa - NSScrollView 从 documentView 的中间开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30042605/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com