簡體   English   中英

Objective-C自動調整子視圖

[英]Objective-C Auto Adjust Subviews

我正在為iPhone應用程序編寫一種方法,該方法將根據該視圖中的可用空間自動調整UIViews的子視圖Y值。 我會盡力解釋而不會引起混淆。

我有一個容器視圖,最多可容納3個子視圖。 每個子視圖中的帶有一個按鈕,用於從容器視圖中刪除子視圖,當子視圖被刪除時,我想調整其余子視圖以占用已刪除子視圖打開的任何空間。

在此先感謝您的幫助!

好,您需要做的第一件事是向您的容器發出一個子視圖已被刪除的信號。

然后,您可以獲取已刪除視圖的高度值,將其除以剩余子視圖的數量,然后擴展那些剩余子視圖的高度。

然后,將剩余的第一個子視圖的Y坐標設置為0,將第二個子視圖(如果有)設置為第一個子視圖的高度值的Y坐標

一種方法是使包裝器視圖成為自定義UIView子類。 在該子類中,為子視圖維護一個單獨的NSMutableArray,其中每個子視圖的數組索引與其在屏幕上的位置相對應。

有了這個,您有兩個選擇。 一種是覆蓋didAddSubview:。 根據要添加的子視圖的框架,可以確定子視圖的位置,並在數組中的適當索引處插入對子視圖的引用。

一個更清潔的選擇是實現您自己的自定義方法,如下所示:

- (void)insertSubview:(UIView *)subview atPosition:(NSInteger)position;

其中position是一個索引,用於標識子視圖應填充的“插槽”。 您可以在此方法中顯式設置子視圖的框架,以及受插入影響的任何其他子視圖。 然后將子視圖插入數組中相應索引處。

最后,重寫willRemoveSubview:。 在其中,您可以在數組上使用indexOfObject:查找要刪除的子視圖的位置。 然后,只需調整其后所有子視圖的框架,然后從數組中刪除該子視圖。

(另一種替代方法是跳過數組,僅使用tag屬性指示每個子視圖的位置。不過,我不喜歡此選項。對任何事物使用tag屬性對我來說總是感覺很糟糕。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM