我有一个使用节和流布局的NSCollectionView。初始布局很好,但是调整窗口大小会导致集合视图项的垂直位置移动(相对于顶部窗口边界)。断面相对于顶部窗口边界保持静止(良好)。但是,当我减小窗口的高度时,向上移动的项目会使它们与部分重叠,并最终向上移动出窗口区域。
我认为这与mac如何使用底部作为坐标原点有关。调整窗口大小会导致底部窗口边界移动。
作为参考,这里是我配置集合视图的地方,包括标准流程布局。
fileprivate func configureCollectionView() {
let nib = NSNib(nibNamed: "MonitorViewItem", bundle: nil)
mapCollectionView.register(nib, forItemWithIdentifier: NSUserInterfaceItemIdentifier("MonitorViewItem"))
let flowLayout = NSCollectionViewFlowLayout()
flowLayout.itemSize = NSSize(width: 100.0, height: 40.0)
flowLayout.sectionInset = NSEdgeInsets(top: 25.0, left: 10.0, bottom: 10.0, right: 10.0)
flowLayout.minimumInteritemSpacing = 10.0
flowLayout.minimumLineSpacing = 10.0
mapCollectionView.collectionViewLayout = flowLayout
}
我尝试在调整窗口大小的委托函数中使布局无效。我的打印语句在窗口调整大小时确认了它的名称,但是使布局无效并不能解决问题。
extension MapWindowController: NSWindowDelegate {
func windowDidResize(_ notification: Notification) {
print("got resize")
mapCollectionView.collectionViewLayout!.invalidateLayout()
}
}
到目前为止,我还没有尝试继承我的视图并覆盖isFlipped。
这是我的.xib中的窗口层次结构:
Window
View
Bordered Scroll View - Collection View
Clip View
Map Collection view
Collection View Flow layout
scroller
scroller
是否有任何建议在调整nswindow大小时修复集合视图项目的垂直位置?