如何让我的NSStackView一个接一个地展示我的观点?我的蓝色盒子正在我的红色盒子上画。
import Cocoa
class TestView : NSView{
override init() {
super.init(frame: NSRect(x: 0,y: 0,width: 100,height: 100))
}
required init(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func drawRect(dirtyRect: NSRect) {
super.drawRect(dirtyRect)
NSColor.redColor().setFill()
NSBezierPath.fillRect(self.bounds)
}
}
class TestView2 : NSView{
override init() {
super.init(frame: NSRect(x: 0,y: 0,width: 100,height: 100))
}
required init(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func drawRect(dirtyRect: NSRect) {
super.drawRect(dirtyRect)
NSColor.blueColor().setFill()
NSBezierPath.fillRect(self.bounds)
}
}
class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet weak var window: NSWindow!
@IBOutlet weak var searchFacetItems: SearchFacetSelectorView!
@IBOutlet weak var searchFacetHeader: SearchFacetSelectorHeader!
var content : NSStackView!
let testView = TestView()
let testView2 = TestView2()
func applicationDidFinishLaunching(aNotification: NSNotification?) {
// Insert code here to initialize your application
content = NSStackView(frame: window.contentView.bounds)
content.orientation = NSUserInterfaceLayoutOrientation.Vertical
content.alignment = NSLayoutAttribute.CenterX
content.addView(testView, inGravity: NSStackViewGravity.Center)
content.addView(testView2, inGravity: NSStackViewGravity.Center)
window.contentView = content!
}
func applicationWillTerminate(aNotification: NSNotification?) {
// Insert code here to tear down your application
}
}通过阅读学习
这不是appkit,但也许我能找到一些线索:如何以编程方式使用UIVIEWS与自动布局
发布于 2014-09-07 01:54:08
您应该能够通过调整NSRect坐标来做到这一点。目前,两个NSRects都使用相同的精确坐标:
NSRect(x: 0, y: 0, width: 100, height: 100) 如果您想让NSView水平地(在右边)位于另一个的旁边:
NSRect(0, 0, 100, 100) // TestView1
NSRect(100, 0, 100, 100) // TestView2垂直下方:
NSRect(0, 0, 100, 100) // TestView1
NSRect(0, -100, 100, 100) // TestView2发布于 2015-05-20 18:49:21
视图没有描述其首选大小的任何约束,例如intrinsicContentSize或显式约束。而且,NSStackView只添加了将其叠加的视图相对于彼此放置的约束,而不是用于调整单个视图大小的约束。
如果没有它们,它们在堆叠轴中的大小就会变得模糊,并且通常会将所有的调整大小提供给一个视图。在您的示例中,我猜想蓝色框不是绘制在红色框的顶部,而是红色框具有0的高度(并且是在蓝色视图之后堆叠的)。
将NSButton添加到堆栈视图中没有这个问题,因为它们确实有一个已定义的intrinsicContentSize。
取决于您的视图是什么--它们是否具有内部大小,或者是否由内部子视图的约束来定义--您将要么重写intrinsicContentSize,要么添加那些最终定义其高度的约束。
编辑:哦,确保在您要添加到堆栈视图的视图上将translatesAutoresizingMaskIntoConstraints设置为false (它看起来不像来自示例代码)。如果没有,您很快就会遇到麻烦,因为自动调整约束试图定位视图,并且与堆栈视图添加的约束冲突。
https://stackoverflow.com/questions/25701039
复制相似问题