gpt4 book ai didi

cocoa - 文档交换时将 NSScrollView 内容设置为左上角而不是左下角

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

今天,我的一位同事来找我,遇到一个问题,他如何加载或 View 交换 NSScrollViewdocumentView 以便显示加载的 View 固定到左上角而不是下角。

他花了一段时间在网络上搜索并苦苦挣扎,尽管阅读了 Apple、StackOverflow 和其他各个地方的文档,但仍没有找到解决方案。

以下是逐个问题:

在 Interface Builder 中将 NSScrollView 拖到项目中。另外,在 Interface Builder 中,将两个自定义 View 拖到项目中并添加一些文本字段、按钮等。

使用以下 IBOutlet 创建 Controller 类(例如 myController):

  • IBOutlet NSScrollView * myScrollView
  • IBOutlet NSView * myCustomView1
  • IBOutlet NSView * myCustomView2

将 socket 连接到 Interface Builder 中的控件。

创建一个NSView子类来翻转documentView:

@implementation myFlippedView

-(id)initWithFrame:(NSRect)frame {
self = [super initWithFrame:frame];
if (self) {
// Initialization code here.
}
return self;
}

-(void)drawRect:(NSRect)dirtyRect {
// Drawing code here.
}

-(BOOL)isFlipped {
return YES;
}

在 Interface Builder 中选择 NSScrollViewdocumentView,并将其设为 myFlippedView 的子类。在 Interface Builder 中,您可以选择 NSScrollView,然后再次单击它以访问 documentView,或者更改 IB 库以显示 TreeView 并选择 NSScrollView< 的子自定义 View .

myController 类中使用以下方法交换 View :

-(void)awakeFromNib {

[myScrollView setDocumentView:myCustomView1];
}

-(IBAction)swapViews:(id)sender {

if ([myScrollView documentView] == myCustomView1) {

[myScrollView setDocumentView:myCustomView2];

} else {

[myScrollView setDocumentView:myCustomView1];

}
}

最后将项目中的一个按钮连接到操作 swapViews,构建并运行。

问题在于坐标未按照 isFlipped 的预期进行解析。

最佳答案

有一个简单但显然经常被忽视的原因。

虽然 isFlipped 是 Interface Builder 中自定义 View 的子类,但 documentView 在 View 交换中被替换,其中第一个在 awakeFromNib 上使用。

解决方案是将 myCustomClass1 和 myCustomClass2 子类化为 myFlippedView 类。

执行此操作并测试它,您会注意到 View 现在显示在 ScrollView 的左上角。然而,它产生了一个新问题。自定义 View 中的所有内容现在都从下到上布局(因为默认情况下所有 NSView 布局都是从左下角开始,因此翻转也会翻转它们的坐标)。

幸运的是,这个问题还有另一个简单的解决方法。继续阅读:-)

在 Interface Builder 中,突出显示 myCustomView1 中的所有控件,然后从 Layout 菜单中选择“Embed Objects In --> Custom View”。根据需要调整大小,对 myCustomView2 执行相同的操作并重建。

瞧。内容 View 交换并出现在 ScrollView 的左上角而不是左下角的 NSScrollView

关于cocoa - 文档交换时将 NSScrollView 内容设置为左上角而不是左下角,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4697583/

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