2012-02-16 31 views
1

请参阅下面的更新:Suppess UIView在子视图更改时重新排版

当子视图正在移动时,我对UIView布局感到困惑。我有一个“Surface”UIView上有几个“Item”子视图。用户可以点击这些项目并将它们拖到表面上。

虽然我注意到,只要Surface的Item子视图移动(被用户拖动),Surface就被标记为需要被中继。

我不希望Surface在用户移动它们之后布置项目。这非常重要,我允许用户在他们认为合适的时候对其进行定位。但是,有时候,初始创建就是一个很好的例子,我确实需要Surface来放置这些项目。

所以我想两件事情之一:

A)禁止SetNeedsLayout()表面上调用时,其子视图项改变(移动)之一。

--OR -

B)知道我为什么被要求重新布局,如果它是由项目运动造成的,什么也不做。

我无法想象我是第一个有这个问题.... :)

###### UPDATE:

更多的调查之后,我发现更多关于到底是怎么回事。正如我原先认为的那样,移动Surface的项目并不是导致Surface重新布局。这只是导致重新布局的阻力的开始。在深入挖掘中,我发现它甚至不是原因的阻力,而是对Surface的bringSubviewToFront的调用。

我需要将物品放在前面,这样当它被拖拽时,它会出现在其他物品之上。

我可以理解为什么带一个子视图可能会触发重新布局,但它不是我想要发生的事情。

+0

你有没有尝试在你的Surface类中覆盖'setNeedsLayout:'? – 2012-02-16 00:44:34

回答

1

也许你应该重写Surface UIView中的layoutSubviews。

+0

我是。问题是,当它被调用时,我不知道为什么*。我是否真的想要重新布局取决于它是否是由子视图移动造成的。 一个奇怪的解决方法是记住Surface的框架是我最后一次铺设的,如果它没有改变,那么不要打扰。这不是优雅的,而且不一定是正确的。这确实与重新布局请求的原因有关。 – 2012-02-16 01:29:33