gpt4 book ai didi

cocoa - 调整窗口大小时固定 NSScrollView 的文档 View

转载 作者:行者123 更新时间:2023-12-03 16:12:32 24 4
gpt4 key购买 nike

这似乎是一个微不足道的问题,但它已经困扰我一段时间了。

我有一个包含 ScrollView 的窗口。通常, ScrollView 的 documentView 在垂直方向上比剪辑 View 大,因此您可以使用垂直滚动条来查看 ScrollView 内的所有内容。

当我调整窗口大小时,我会重新计算 ScrollView 的 documentView 中内容的大小(因为 ScrollView 可能会变薄,这可能使得 documentView 的高度必须增加)。然而,副作用是,当调整窗口大小时,documentView 使底部可见边缘与剪辑 View 的底部边缘保持齐平(即,它确保最后一行文本始终可见)。这是一种奇怪的效果,因为通常情况下,窗口使文档 View 的顶部可见边缘与剪辑 View 的顶部边缘齐平(也就是说,文档 View 中最上面的文本行保持固定在顶部)。

所以,我最初解决这个问题的想法只是实现一个 windowDidResize: 或 windowWillResize:toSize: 通知,注意旧窗口框架的高度和新高度之间的增量,然后简单地将 ScrollView 滚动那么多为了将 ScrollView 的顶线固定在顶部。

但是,由于某种原因,这似乎不起作用。它几乎可以工作,但是某些调整大小增量似乎会偏离一个像素,如果您调整窗口大小的速度足够快,有时会偏离约 10 个像素。因此,效果是 ScrollView 的顶线几乎固定在顶部,但又不完全固定,而且会分散注意力。

有更好的方法吗?相关代码如下:

- (void)windowDidResize:(NSNotification *)notification;
{
if ([notification object] == mainWindow) {
CGFloat currentWindowHeight = [mainWindow frame].size.height;

// previousWindowHeight is an ivar
NSNumber *heightDeltaNum = [NSNumber numberWithFloat:(currentWindowHeight - previousWindowHeight)];
previousWindowHeight = currentWindowHeight;
[[NSNotificationCenter defaultCenter] postNotificationName:@"AFSnapScrollView" object:heightDeltaNum];
}
}

- (void)snapScrollViewNotification:(NSNotification *)theNotification;
{
[self snapScrollView];

NSNumber *heightDeltaNum = [theNotification object];

CGFloat newY = [[tagScrollView documentView] visibleRect].origin.y - [heightDeltaNum floatValue];
NSPoint pointToScroll = NSMakePoint(0,newY);
[[tagScrollView documentView] scrollPoint:pointToScroll];
}

- (void)snapScrollView;
{

[...]

// adjust the view frame
[[tagScrollView documentView] setFrame:NSMakeRect(0, 0, existingDocumentFrame.size.width, newDocumentViewHeight)];

[...]

}

最佳答案

您的文档 View 需要重写 -(BOOL)isFlipped 方法并返回 YES。

关于cocoa - 调整窗口大小时固定 NSScrollView 的文档 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3350803/

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