窗口调整大小后,迅速的NSCollectionView布局错误

时间:2018-10-19 21:27:46

标签: swift macos nscollectionview

我有一个使用节和流布局的NSCollectionView。初始布局很好,但是调整窗口大小会导致集合视图项的垂直位置移动(相对于顶部窗口边界)。断面相对于顶部窗口边界保持静止(良好)。但是,当我减小窗口的高度时,向上移动的项目会使它们与部分重叠,并最终向上移动出窗口区域。

enter image description here

enter image description here

我认为这与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大小时修复集合视图项目的垂直位置?

0 个答案:

没有答案