标签: nsstackview

NSScrollView包含NSStackView.为什么NSStackView项目从下到上?

包含NSStackView的NSScrollView.NSStackView的项目将在运行时添加.新的NSStackView项目从下到上,但我希望它们是从上到下. 在此输入图像描述 在此输入图像描述

main.storyboard

在此输入图像描述

ViewController

import Cocoa

class ViewController: NSViewController {

    var todoList:[Todo] = []

    @IBOutlet weak var todosStackView: NSStackView!
    @IBOutlet weak var todosScrollView: NSScrollView!

    @IBAction func onEnter(sender: NSTextField) {
        let todo = Todo()
        todo.content = sender.stringValue
        self.todoList.append(todo)

        let todoItemView = TodoItem()
        todoItemView.setButtonType(.SwitchButton)
        todoItemView.todo=todo
        todosStackView.addView(todoItemView, inGravity: .Top)
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    override var representedObject: AnyObject? {
        didSet {
        // Update the view, if already loaded.
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

复选框按钮类

import …
Run Code Online (Sandbox Code Playgroud)

macos cocoa nsscrollview nsstackview swift

5
推荐指数
1
解决办法
1794
查看次数

NSStackView edgeInsets 被忽略

Interface Builder 在运行应用程序时会忽略使用edgeInsetson 。NSStackView

NSStackView edgeInsets 不工作

cocoa autolayout nsstackview

4
推荐指数
1
解决办法
434
查看次数

NSStackView和具有固有内容大小的子视图

我有一个NSStackView以编程方式创建,并向其中添加了一个NSButton。

    NSStackView *stackView = [[NSStackView alloc] initWithFrame:rect];
    stackView.autoresizingMask = NSViewWidthSizable|NSViewHeightSizable;
    stackView.alignment = NSLayoutAttributeBaseline;
(...)
    NSButton *button = [[NSButton alloc] initWithFrame:CGRectMake(0, 0, 40, 50)];
    button.image = item.image;
    button.title = item.name;
    button.bordered = NO;
    button.imagePosition = NSImageAbove;
    button.translatesAutoresizingMaskIntoConstraints = NO;
(...)

    [stackView addView:button inGravity:NSStackViewGravityLeading];
Run Code Online (Sandbox Code Playgroud)

我期望这已经足够,因为按钮具有固有的内容大小(我检查了它是否返回了适当的值)。

检查视图层次结构,我可以看到按钮框是origin =(x = 0,y = 0)size =(width = 40,height = 50),其超级视图(NSStackViewContainer的一个实例)是origin = {x = 0 ,y = 0)size =(width = 0,height = 0),而NSStackView是origin =(x = 0,y = 0)size =(width = 400,height = 50)。

如您所见,NSStackViewContainer的宽度和高度为0 ...

如果我在按钮上添加了宽度和高度限制,则一切正常。为什么按钮的internalContentSize不够?

cocoa autolayout nsstackview

3
推荐指数
1
解决办法
4761
查看次数

以编程方式将视图添加到NSStackView后,视图无法正确显示

所以,我正在尝试向NSStackView添加一些视图(在此示例中为NSTextField):

我已将NSStackView实例添加到XIB文件中,并将其作为小部件链接到文档中.在... didLoadNib我这样做:

NSTextField *tf = [[NSTextField alloc] init];
tf.stringValue = @"124";
[tf setFrameSize:NSMakeSize(100, 20)];
[widgets addView:tf inGravity:NSStackViewGravityLeading];
NSLog(@"%f - %d", NSHeight(tf.frame), [tf hasAmbiguousLayout]);

NSTextField *tf2 = [[NSTextField alloc] init];
tf2.stringValue = @"123";
[tf2 setFrameSize:NSMakeSize(100, 20)];
[widgets addView:tf2 inGravity:NSStackViewGravityLeading];
NSLog(@"%f - %d", NSHeight(tf2.frame), [tf2 hasAmbiguousLayout]);
Run Code Online (Sandbox Code Playgroud)

TextFields被放置在StackView中,但是它们被放置在相同的位置,即第二个完全重叠.我仍然可以先通过[space + tab]选择.

这是控制台输出:

2015-06-13 17:11:00.736 celty-test[62306:9217679] 20.000000 - 1
2015-06-13 17:11:00.739 celty-test[62306:9217679] Unable to simultaneously satisfy constraints:
(
    "<NSLayoutConstraint:0x608000084bf0 V:[NSStackViewSpacer:0x6080001834d0(>=8)]>",
    "<NSLayoutConstraint:0x608000084f10 V:[NSTextField:0x608000183330]-(0)-[NSStackViewSpacer:0x6080001834d0]>",
    "<NSLayoutConstraint:0x608000085460 V:[NSStackViewSpacer:0x6080001834d0]-(0)-[NSTextField:0x608000183400]>",
    "<NSAutoresizingMaskLayoutConstraint:0x608000084970 h=--& v=--& V:[NSTextField:0x608000183330]-(0)-| …
Run Code Online (Sandbox Code Playgroud)

cocoa objective-c nsstackview

2
推荐指数
1
解决办法
1694
查看次数

在NSStackView中拖动视图以重新排列顺序

是否可以通过拖动子视图来更改NSStackView中视图的顺序,就像我们在NSTableView中所做的一样?

macos cocoa nsview nsstackview

2
推荐指数
1
解决办法
544
查看次数