【问题标题】:Resizing the window according to a variable swift根据变量 swift 调整窗口大小
【发布时间】:2015-05-26 03:27:06
【问题描述】:

我有一个NSViewController 和一个变量num。我想根据该变量动态更改窗口的大小。有没有办法快速做到这一点?

【问题讨论】:

    标签: macos cocoa swift resize window


    【解决方案1】:

    我需要切换查看文本视图,因此我在窗口上覆盖了一个不可见的视图 - hideRect 就在文本视图的旁边;通过这种方式,我可以将大小调整为较小的(hideRect)并稍后恢复到原始大小 - origRect。隐藏在 viewDidLoad() 中捕获的原始矩形。斯威夫特 3/Xcode 8.3.3

    // class global contants
    let kTitleUtility =     16
    let kTitleNormal =      22
    
    @IBOutlet var hideView: NSView!
    var hideRect: NSRect?
    var origRect: NSRect?
    
    @IBAction func toggleContent(_ sender: Any) {
        // Toggle content visibility
        if let window = self.view.window {
            let oldSize = window.contentView?.bounds.size
            var frame = window.frame
            if toggleButton.state == NSOffState {
    
                frame.origin.y += ((oldSize?.height)! - (hideRect?.size.height)!)
                window.setFrameOrigin(frame.origin)
                window.setContentSize((hideRect?.size)!)
    
                window.showsResizeIndicator = false
                window.minSize = NSMakeSize((hideRect?.size.width)!,(hideRect?.size.height)!+CGFloat(kTitleNormal))
                creditScroll.isHidden = true
            }
            else
            {
                let hugeSize = NSMakeSize(CGFloat(Float.greatestFiniteMagnitude), CGFloat(Float.greatestFiniteMagnitude))
    
                frame.origin.y += ((oldSize?.height)! - (origRect?.size.height)!)
                window.setFrameOrigin(frame.origin)
                window.setContentSize((origRect?.size)!)
    
                window.showsResizeIndicator = true
                window.minSize = NSMakeSize((origRect?.size.width)!,(origRect?.size.height)!+CGFloat(kTitleNormal))
                window.maxSize = hugeSize
                creditScroll.isHidden = false
            }
        }
    }
    

    这也保留了寡妇的视觉原点和最小尺寸。

    【讨论】:

      【解决方案2】:

      Swift 3 中使用 setFrame 调整窗口大小。

      来自 ViewController 的示例:

      func resizeWin(size:(CGFloat,CGFloat)){
      
          self.view.window?.setFrame(NSRect(x:0,y:0,width:size.0,height:size.1), display: true)
      
      }
      

      【讨论】:

        【解决方案3】:

        假设您的窗口有一个名为“window”的 IBOutlet,而您的动态编号名为“myDynamicNumber”:

        func resize() {
            var windowFrame = window.frame
            let oldWidth = windowFrame.size.width
            let oldHeight = windowFrame.size.height
            let toAdd = CGFloat(myDynamicNumber)
            let newWidth = oldWidth + toAdd
            let newHeight = oldHeight + toAdd
            windowFrame.size = NSMakeSize(newWidth, newHeight)
            window.setFrame(windowFrame, display: true)
        }
        

        【讨论】:

          猜你喜欢
          • 2012-08-07
          • 1970-01-01
          • 2019-07-26
          • 1970-01-01
          • 2014-10-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-24
          相关资源
          最近更新 更多