【发布时间】:2015-06-04 00:13:46
【问题描述】:
我需要一些有关以编程方式设置自动布局的帮助。我有一个视图,我将其设置为由情节提要管理的另一个视图。
var content = NSView(frame: NSRect(x: 0, y: 0, width: 3000, height: self.view.frame.height))
[...]
scrollingView.documentView = content
比我添加视图将始终从上到下的引脚约束:
let topPinContraints = NSLayoutConstraint(
item: contentView
, attribute: NSLayoutAttribute.Top
, relatedBy: .Equal
, toItem: contentView.superview
, attribute: NSLayoutAttribute.Top
, multiplier: 1.0
, constant: 0
)
let bottomPinContraints = NSLayoutConstraint(
item: contentView
, attribute: NSLayoutAttribute.Bottom
, relatedBy: .Equal
, toItem: contentView.superview
, attribute: NSLayoutAttribute.Bottom
, multiplier: 1.0
, constant: 0
)
let heightContraints = NSLayoutConstraint(
item: contentView
, attribute: NSLayoutAttribute.Height
, relatedBy: .Equal
, toItem: contentView.superview
, attribute: NSLayoutAttribute.Height
, multiplier: 1.0
, constant: 0
)
NSLayoutConstraint.activateConstraints([
topPinContraints
, bottomPinContraints
, heightContraints
])
contentView.needsLayout = true
在 NSLayoutConstraint.activateConstraints 之后,视图在父视图中从上到下填充,但是窗口的高度不再可调整大小。 我可以调整它的宽度,但高度现在是固定的。
如何在不丢失调整大小的可能性的情况下添加顶部和底部图钉?
非常感谢,
ps.
【问题讨论】:
-
content(在你的第一个 sn-p 中)和contentView(在你的第二个中)是同一个东西吗?您是否在视图上将translatesAutoresizingMaskIntoConstraints设置为 false?另外,如果documentView被固定到它的父视图,也就是剪辑视图,在什么情况下滚动视图会滚动?也就是说,文档视图什么时候会和滚动视图的内容大小不一样? -
嗨,肯,是的,对不起。 contentView = view,因为我将它放入 func: func autoLayout(contentView: NSView){}。当我设置 contentView.translatesAutoresizingMaskIntoConstraints = false 时,视图会完全消失。
-
我可以设置没有 contentView.translatesAutoresizingMaskIntoConstraints 的 heightContraints 和 widthtContraints,但是滚动视图不再起作用,因为我认为宽度比 contentView.superview!.frame.with 还要大。 :-(
-
最后一件事:我可以用 let computedWith: CGFloat = (CGFloat) (contentView.subviews.count * 130) 计算,因为我的子视图具有固定大小。但是如何更新约束呢?由于 NSConstraintBasedLayoutVisualizeMutuallyExclusiveConstraints 错误,我无法调用我的 autoLayout 函数两次。
标签: macos cocoa autolayout