请参阅下面的更新:Suppess UIView在子视图更改时重新排版
当子视图正在移动时,我对UIView布局感到困惑。我有一个“Surface”UIView上有几个“Item”子视图。用户可以点击这些项目并将它们拖到表面上。
虽然我注意到,只要Surface的Item子视图移动(被用户拖动),Surface就被标记为需要被中继。
我不希望Surface在用户移动它们之后布置项目。这非常重要,我允许用户在他们认为合适的时候对其进行定位。但是,有时候,初始创建就是一个很好的例子,我确实需要Surface来放置这些项目。
所以我想两件事情之一:
A)禁止SetNeedsLayout()表面上调用时,其子视图项改变(移动)之一。
--OR -
B)知道我为什么被要求重新布局,如果它是由项目运动造成的,什么也不做。
我无法想象我是第一个有这个问题.... :)
###### UPDATE:更多的调查之后,我发现更多关于到底是怎么回事。正如我原先认为的那样,移动Surface的项目并不是导致Surface重新布局。这只是导致重新布局的阻力的开始。在深入挖掘中,我发现它甚至不是原因的阻力,而是对Surface的bringSubviewToFront的调用。
我需要将物品放在前面,这样当它被拖拽时,它会出现在其他物品之上。
我可以理解为什么带一个子视图可能会触发重新布局,但它不是我想要发生的事情。
你有没有尝试在你的Surface类中覆盖'setNeedsLayout:'? – 2012-02-16 00:44:34