我有一个自定义NSView,其中包含一个子视图 - 为了解决这个问题,顶级视图只是充当一个容器,并自动调整大小以适应窗口。它的子视图从窗口边缘绘制一个10像素的插入矩形,除了底部,它应该被窗口剪切,直到它被调整大小以显示整个矩形。但是,它并不像我打算的那样工作,而是在其超视图的高度比它小的时候缩小矩形的高度。我该如何避免这种情况,并让它保持在适当的高度,而在超视图较小时才剪辑?自定义NSView的子视图正在调整自己的大小,以适应其超级视图
父视图的实现代码:
- (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;
}
而子视图仅仅是:
- (void)drawRect:(NSRect)dirtyRect {
[[NSColor blackColor] set];
[NSBezierPath strokeRect:dirtyRect];
}
- (BOOL)isFlipped {
return YES;
}
正如我在回答ericgorr的回答时指出的那样,我无法使用autoResizingMask工作。关于'addSubview:'的位置和使用'[自定义]',但是,谢谢你让我知道!这就说得通了。 – 2010-03-22 20:32:24
现在我已经在subview中使用'[self bounds]'而不是'dirtyRect',它可以工作,这对您描述要重绘的区域的'dirtyRect'的解释是有意义的。那谢谢啦! – 2010-03-22 20:37:18
不客气!很高兴听到它的工作。 – 2010-03-22 20:45:15