[英]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.