Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 带ChildWindow的NSWindow闪烁_Ios_Swift_Xcode6 - Fatal编程技术网

Ios 带ChildWindow的NSWindow闪烁

Ios 带ChildWindow的NSWindow闪烁,ios,swift,xcode6,Ios,Swift,Xcode6,我有一个主NSWindow和3个子NSWindow,如: _______________________________________ | || || | | || || | | || || | | || || | | ||

我有一个主NSWindow和3个子NSWindow,如:

_______________________________________
|     ||                      ||      |
|     ||                      ||      |
|     ||                      ||      |
|     ||                      ||      |
|     ||                      ||      |
|     ||                      ||      |
|_____||______________________||______|
我已经能够通过单击按钮来调整左、右子窗口的大小,其效果与Xcode侧栏几乎相同,但当我向子窗口添加内容时(例如,NSTableView)如果我关闭其中一个侧栏,在关闭后执行的任何调整大小操作都会出现闪烁和延迟效果。甚至主窗口的正常大小调整。你知道为什么会这样吗

代码1:侧边栏的删除操作

var newFrame: NSRect
if sender.selectedSegment == 0 {      //leftToolbar button clicked
    if leftToolbar.frame.width > 0 {       //leftToolbar is closed
        newFrame = self.leftToolbar.frame
        newFrame.size.width = 0
        self.leftToolbar.setFrame(newFrame, display: true, animate: true)
    } else {
        newFrame = self.leftToolbar.frame
        newFrame.size.width = self.sidebarsWidth
        self.leftToolbar.setFrame(newFrame, display: true, animate: true)
    }
}
代码2:重新调整大小的通知

func windowResized(notification: NSNotification) {
    var win = notification.object as NSWindow
    // (...)    code from main window resizing
    if (win.isEqual(self.leftToolbar)) {    // Resizing or Animation of the left sidebar
        leftTable!.view.frame = (self.leftToolbar.contentView as NSView).frame
        var newFrame = self.mainContent.frame
        if self.leftToolbar.frame.width > 0 {     // if the sidebar is open
            newFrame.origin.x = self.mainWin.frame.origin.x+self.leftToolbar.frame.width+10.0
            newFrame.origin.y = self.mainWin.frame.origin.y+5.0
            if self.rightToolbar.frame.width > 0 {      // if right sidebar is open
                newFrame.size.width = self.mainWin.frame.width-10.0-10.0-self.leftToolbar.frame.width-self.rightToolbar.frame.width
            } else {
                newFrame.size.width = self.mainWin.frame.width-10.0-5.0-self.leftToolbar.frame.width-self.rightToolbar.frame.width
            }
        } else {      // sidebar is now closed
            newFrame.origin.x = self.mainWin.frame.origin.x+self.leftToolbar.frame.width+5.0
            newFrame.origin.y = self.mainWin.frame.origin.y+5.0
            if self.rightToolbar.frame.width > 0 {      // if right sidebar is open
                newFrame.size.width = self.mainWin.frame.width-5.0-10.0-self.leftToolbar.frame.width-self.rightToolbar.frame.width
            } else {
                newFrame.size.width = self.mainWin.frame.width-5.0-5.0-self.leftToolbar.frame.width-self.rightToolbar.frame.width
            }
        }
        self.mainContent.setFrame(newFrame, display: true)      // set the mid (child) window to occupy the space inherited from the left sidebar
    }
    // (...)   Code from right sidebar resizing
}
注1:这是我的代码,由我开发,不是从某处复制的


注2:您可以考虑调整大小,因为它们被测试和工作。正如上面所解释的,当使用内容时,它们只会闪烁。

必须解决这个问题。将子窗口设置为0宽度的框架、获取内存转储或类似内容时,将子窗口设置为1宽度并“隐藏”它们是正确的解决方案