繁体   English   中英

Swift:调整嵌入式自定义NSView的大小

[英]Swift: Resize Embedded Custom NSView

我有一个自定义NSView嵌入在NSScrollView中。

我已将自定义视图设置为使用其他视图控制器。

import Cocoa

class ViewController: NSViewController
{

    @IBOutlet weak var clipView: NSClipView!
    var vc : NSViewController?

    override func viewDidLoad()
    {
        super.viewDidLoad()
        if let storyboard = NSStoryboard(name: "Main",bundle: nil)
        {
            vc = storyboard.instantiateControllerWithIdentifier("vc") as? NSViewController
            clipView.documentView = vc!.view
        }
    }
}

这一切似乎都可行,但是当我调整外部窗口的大小时,我希望自定义视图中的视图控制器增加。

我已经设置了约束,并且自定义视图也相应增长,但是内容说的宽度相同。

在此处输入图片说明

扩展窗口时,自定义框架会更改大小,但其内容不会重新调整大小。 例如,在这种情况下,我希望按钮在视图中保持正确对齐。

在此处输入图片说明

如您所见,当窗口扩展时,自定义视图的红色背景会更改大小,但是按钮仍保留在其原始位置。

如何获取内部视图以与外部视图调整大小?

更新:遵循以下建议。 我现在添加了一个NSScrollView,并在所有约束条件下都很好地跟随了调整大小。 当我删除底部约束时,它自身会折叠并在底部对齐:

在此处输入图片说明

我想我需要指定一个高度并使视图顶部对齐。 有任何想法吗?

如果在视图本身上设置背景,则可以看到其大小/位置没有变化。

vc.view.wantsLayer = true
vc.view.layer?.backgroundColor = NSColor.blueColor().CGColor

例

因此,您可以添加约束来告诉它填充整个剪辑视图:

vc.view.translatesAutoresizingMaskIntoConstraints = false

// these are 10.11-only APIs, but you can use the visual format language or any other autolayout APIs
vc.view.leadingAnchor.constraintEqualToAnchor(vc.view.superview!.leadingAnchor).active = true
vc.view.topAnchor.constraintEqualToAnchor(vc.view.superview!.topAnchor).active = true
vc.view.bottomAnchor.constraintEqualToAnchor(vc.view.superview!.bottomAnchor).active = true
vc.view.trailingAnchor.constraintEqualToAnchor(vc.view.superview!.trailingAnchor).active = true

固定版

但是然后我会问,为什么要使用滚动视图?

假设外部视图约束更改后,您在按钮中具有正确的约束,则可能要调用view.layoutIfNeeded()或button.layoutIfNeeded()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM