2012-02-16 32 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