我有一个嵌入在NSScrollView中的自定义NSView。
我已将自定义视图设置为使用其他视图控制器。
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,并且在所有约束条件下都可以很好地调整大小。当我移除底部约束时,它会自动折叠并且底部对齐:
我想我需要指定一个高度并顶部对齐视图。有什么想法吗?
答案 0 :(得分:1)
如果在视图本身上设置背景,则可以看到其大小/位置不会改变。
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
但后来我会问,你为什么要使用滚动视图呢?
答案 1 :(得分:0)
假设在外部视图约束发生更改后您在按钮中有正确的约束,则可能需要调用view.layoutIfNeeded()或button.layoutIfNeeded()