Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa NSView是否有类似于UIView的功能;s setNeedsLayout/layoutSubviews方法?_Cocoa_Macos_Layout_Nsview - Fatal编程技术网

Cocoa NSView是否有类似于UIView的功能;s setNeedsLayout/layoutSubviews方法?

Cocoa NSView是否有类似于UIView的功能;s setNeedsLayout/layoutSubviews方法?,cocoa,macos,layout,nsview,Cocoa,Macos,Layout,Nsview,我是否将这些东西放入显示方法中?或者有类似的东西吗?类似于layoutSubviews的是NSView的resizeSubviewsWithOldSize:方法。我想,类似于setNeedsLayout将直接调用resizeSubviewsWithOldSize:[self frame].size。从OSX 10.7开始: -(void)布局相当于布局子视图 现在有一个相同的设置needslayout 如果自定义视图需要使用基于约束的布局系统执行不可表达的自定义布局,请重写此方法。在这种情况下,

我是否将这些东西放入显示方法中?或者有类似的东西吗?

类似于
layoutSubviews
的是
NSView
resizeSubviewsWithOldSize:
方法。我想,类似于
setNeedsLayout
将直接调用
resizeSubviewsWithOldSize:[self frame].size

从OSX 10.7开始:

-(void)布局
相当于布局子视图

现在有一个相同的
设置needslayout

如果自定义视图需要使用基于约束的布局系统执行不可表达的自定义布局,请重写此方法。在这种情况下,当影响自定义布局的内容发生更改时,您负责调用
setNeedsLayout:

在布局阶段,不能使任何约束无效,也不能使superview或视图层次之外的视图的布局无效。也不能将图形过程作为布局的一部分调用


作为实现的一部分,您必须调用
[super layout]

有时,
resizeSubviewsWithOldSize
不会被调用。
然后,尝试用旧SuperViewSize覆盖大小调整

resizeSubviewsWithOldSize:似乎什么都不做。从来没有人给我打电话。可能是因为我使用自动布局,文档中说它与自动调整大小有关

NSView的布局似乎与UIView的布局子视图相同。如果您想做一些特殊的工作来替换它们,或者除了自动调整大小或自动布局之外,它们都是可重写的

在UIView上调用此命令

[view setNeedsLayout];
在NSView上似乎与此相同

view.needsLayout = YES;

这就引出了一个问题,为什么“setNeedsLayout”甚至是一个函数名?实际上,您决定从setter函数中删除参数,并在标题中保留“set”吗?为什么不是“计划布局”?这将避免像这样的堆栈溢出问题。

可能重复的问题,我认为这是另一个问题。一个问题是如何告诉窗口从头开始重新显示所有内容。另一个问题只问布局。事实上:这是一个不同的问题。这个问题与windows无关。它与NSView相关。这仅适用于基于约束的布局(也称为“自动布局”)。感谢您发布您的发现。原因是没有“仅写”属性,他们不希望您查询此状态。为什么不同平台之间存在这种差异?我不能说,选择一个苹果!