gpt4 book ai didi

objective-c - 自定义 NSView 的 subview 正在调整自身大小以适应其 super View

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

我有一个自定义 NSView,其中包含一个 subview - 为了解决此问题,顶层 View 只是充当容器并自动调整大小以适合窗口。它的 subview 绘制一个距离窗口边缘 10 像素插入的矩形(底部除外),底部应该被窗口剪切,直到调整大小以显示整个矩形。然而,它的行为并不符合我的预期,而是当它的父 View 的高度小于它的高度时,它会缩小矩形的高度。如何避免这种情况并让它保持在适当的高度,而不是在 super View 较小时被剪裁?

父 View 的实现代码为:

- (id)initWithFrame:(NSRect)frameRect {
self = [super initWithFrame:frameRect];
if (self) {
subView = [[SubView alloc] initWithFrame:frameRect];
}
return self;
}

- (void)drawRect:(NSRect)dirtyRect {
[[NSColor grayColor] set];
[subView setFrame:NSMakeRect(10, 10, dirtyRect.size.width - 20, 500)];
[self addSubview:subView];
}

- (BOOL)isFlipped {
return YES;
}

subview 就是:

- (void)drawRect:(NSRect)dirtyRect {
[[NSColor blackColor] set];
[NSBezierPath strokeRect:dirtyRect];
}

- (BOOL)isFlipped {
return YES;
}

最佳答案

ericgorr指出,autoResizingMask 应该解决调整大小问题。

但是,我注意到您正在 drawRect 中添加 subview ,这不是正确的位置。 drawRect 在程序的生命周期中被调用多次,但 addSubview: 只需要(并且仅应该)调用一次,例如所以:

- (id)initWithFrame:(NSRect)frameRect {
self = [super initWithFrame:frameRect];
if (self) {
subView = [[SubView alloc] initWithFrame:frameRect];
[self addSubview:subView]; // this view now owns subView ...
[subView release]; // ... so we can release our copy
}
return self;
}

- (void)drawRect:(NSRect)dirtyRect {
[[NSColor grayColor] set];
[subView setFrame:NSMakeRect(10, 10, [self bounds].size.width - 20, 500)];
}

另请注意使用[selfbounds]而不是dirtyRectdirtyRect 是一个描述需要重绘区域的矩形。这并不总是您 View 的整个边界矩形。另一方面,[selfbounds] 将始终代 TableView 的整个边界,无论重绘哪一部分。

关于objective-c - 自定义 NSView 的 subview 正在调整自身大小以适应其 super View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2494528/

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