NSView是否有类似于UIView的setNeedsLayout / layoutSubviews方法的东西?

时间:2011-01-13 03:23:58

标签: cocoa macos layout nsview

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

4 个答案:

答案 0 :(得分:13)

类似于layoutSubviewsresizeSubviewsWithOldSize:的{​​{1}}方法。我猜,类似于NSView会直接调用setNeedsLayout

答案 1 :(得分:11)

从OSX 10.7开始:

  • (void)布局等同于layoutSubviews

现在有一个相同的setNeedsLayout。

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

作为布局阶段的一部分,您不能使任何约束无效,也不会使超级视图的布局或视图层次结构之外的视图无效。您也可以不作为布局的一部分调用绘图传递。

您必须将[超级布局]作为实施的一部分。

答案 2 :(得分:1)

有时,resizeSubviewsWithOldSize不会被调用。 然后,尝试覆盖resizeWithOldSuperviewSize

答案 3 :(得分:1)

resizeSubviewsWithOldSize:好像什么也没做。从来没有为我打电话。也许是因为我使用自动布局,文档说它与自动调整有关。

NSView的布局似乎与UIView的 layoutSubviews 相同。如果你想做一些特殊的工作来替换或者除了自动调整或自动布局外,它们都是可以覆盖的。

在UIView上调用

[view setNeedsLayout];

似乎与NSView上的相同

view.needsLayout = YES;

这引出了一个问题,为什么" setNeedsLayout"甚至一个功能名称?就像,真的,你决定从setter函数中删除参数,并保持" set"在标题?为什么不" scheduleLayout"?这样可以避免出现像这样的Stack Overflow问题。