我在菜单栏弹出窗口中插入 NSTableView。
我想调整我的弹出面板的大小以使其内容适合 tableview。例如,如果没有行 - tableview 是隐藏的。通过添加新行,我正在根据当前 tableview 高度 + 新单元格的高度重新计算面板的高度。
我正在添加单元格
[self.tableView insertRowsAtIndexes:[NSIndexSet indexSetWithIndex:0] withAnimation:NSTableViewAnimationSlideDown];
并更新面板的高度:
[[self window] setFrame:panelRect display:YES animate:YES];
(都在同一个 addRow 方法中)
这工作正常,但看起来很难看 - 表格视图和窗口彼此分开动画。我想要的只是同步它们,在 tableview 增长和缩小的同时移动窗口的边框。
根据我的 iOS 开发经验,我有一个想法 - 观察 tableview 的 contentSize,但我在这种方法中失败了:
- (void)awakeFromNib
{
[super awakeFromNib];
...
[self.scrollView.documentView addObserver:self forKeyPath:@"bounds.size" options:NSKeyValueObservingOptionNew context:NULL];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
NSLog(@"!");
}
self.scrollview
链接到 IB 中的 tableview 的容器滚动视图。该代码导致异常:
An instance 0x10053a1d0 of class NSConcreteValue was deallocated while key value observers were still registered with it. Observation info was leaked, and may even become mistakenly attached to some other object. Set a breakpoint on NSKVODeallocateBreak to stop here in the debugger. Here's the current observation info:
<NSKeyValueObservationInfo 0x10053c850> (
<NSKeyValueObservance 0x10053c7a0: Observer: 0x10053a160, Key path: size, Options: <New: YES, Old: NO, Prior: NO> Context: 0x0, Property: 0x10053c880>
)
使用frame.size
keypath 会导致同样的异常。使用只frame
返回不回调。
将感谢任何导致我在 KVO 中出现错误或使用窗口调整大小功能实现 tableview 的其他想法。