我希望弄清楚如何让我的NSView正确地重新调整大小并重新绘制它的元素,但是我已经拉了太多头发来调试我的问题我觉得是时候问了。
问题
我的自定义视图FSNavigatorView为从文档中读入的每个项目项绘制一个“图标”(存储在可变数组中的NSBezierPath)。项目项目的范围可以从几个项目到60多个项目,具体取决于文档。在窗口重新调整大小时,视图应该重新绘制图标,以便它们正确排列。这在我使用NSScrollView之前有效,但我不希望最终用户每次添加更多项目项时都必须重新调整窗口大小。使用NSScrollView,我无法获得嵌入其中的NSView以一致地重绘。我附上图片来证明我的意思。第一个是在我调整大小(即打开文档)之前,下一个是在我对角调整大小时。 2 正如您在图像中看到的那样,当我对角调整大小时,NSView重绘一次导致4列而不是3列但如果我继续拉动增加窗口大小则没有任何反应。另外,如果我在打开文档后只是水平调整大小,则不会重绘。
背景
我有一个名为FSNavigatorView的自定义NSView。在我的xib中,我有一个窗口(FSProjectSpace是NSDocument的子类),其中包含一个NSScrollView,其中包含一个NSView(我尝试过编辑器 - >嵌入 - >滚动视图,但这造成了更多的伤害而不是好处)。我在FSProjectSpace中有两个出口用于NSScrollView和NSView(这是我的自定义FSNavigatorView)。
FSProjectSpace.h
@property (readwrite, assign) IBOutlet FSNavigator *navigator;
@property (readwrite, assign) IBOutlet NSScrollView *scrollView;
FSProjectSpace.m
- (void)windowControllerDidLoadNib:(NSWindowController *)aController {
[self.scrollView setDocument:self.navigator];
[self.navigator setProjectData:project]; // this sets the project data which the navigator view uses to draw icons.
}
我有自定义NSView在调整大小的超级视图后通知更新帧,因为[self inLiveResize]
在NSScrollView中也不起作用。
我们非常感谢任何建议。我一整天都在Google上搜索/阅读Apple文档而且没有任何头脑。