gpt4 book ai didi

objective-c - setNeedsLayout :YES 后未调用NSView布局方法

转载 作者:搜寻专家 更新时间:2023-10-30 19:46:09 25 4
gpt4 key购买 nike

从 OSX 10.7 开始,如果您希望执行 NSView 的手动布局,您应该通过覆盖 layout 方法来实现,并且无论何时您希望安排对该方法的调用,您只需执行以下操作:

[myView setNeedsLayout:YES] 

我非常熟悉 iOS 中的这种模式,但在 OSX 上它似乎不起作用。我已经创建了一个自定义 NSView 并实现了 layout 但它似乎永远不会被调用。曾经。在添加 subview 之后,在调用 setNeedsLayout:YES 之后,从来没有,我不知道为什么。我可以手动调用 layout 并且一切正常,但文档说永远不要这样做。

来自 Xcode:

- (void)layout
Override this method if your custom view needs to perform custom
layout not expressible using the constraint-based layout system. In
this case you are responsible for calling setNeedsLayout: when
something that impacts your custom layout changes.

来自在线文档:

You should only override layout only if you want to do custom layout. If you do, then you also need to invoke setNeedsLayout: when something that feeds into your custom layout changes.

链接:http://developer.apple.com/library/mac/#releasenotes/UserExperience/RNAutomaticLayout/#//apple_ref/doc/uid/TP40010631-CH1-SW14

非常感谢任何帮助。

更新:这是一个示例 Xcode 项目的链接,该项目说明了问题 LayoutTest.zip

最佳答案

您需要启用自动布局。如果您使用的是 xib 文件(您应该是,没有突击队!),您可以在文件检查器的 Interface Builder 文档部分选中自动布局复选框。

在代码中: [myView setTranslatesAutoresizingMaskIntoConstraints:YES]

在您的示例项目中,您没有任何限制。 View 不会在没有任何约束的情况下调用布局。

NSView *aView = self.window.contentView;
NSDictionary *viewsDictionary=NSDictionaryOfVariableBindings(aView, complexView);
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"[aView]-[complexView]" options:0 metrics:nil views:viewsDictionary];

for (NSLayoutConstraint *constraint in constraints) {
[complexView addConstraint:constraint];
}

关于objective-c - setNeedsLayout :YES 后未调用NSView布局方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17197041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com