2011-08-30 31 views
6

我想定位一個子UIView(sub_UIView)作爲父UIView(parent_UIView)的子視圖。當parent_UIView調整大小/移動時,sub_UIView將保留parent_UIView的相對位置。例如,sub_UIView位於parent_UIView的右下角。當parent_UIView移動時,sub_UIView會自動停留在parent_UIView的右下角。如何自動處理iOS中的相對定位?

我設法做到這一點,當parent_UIView幀移動時更新sub_UIView的框架,但如何在iOS中自動執行此操作?有沒有這個屬性? (類似於autoresizingmask用於調整子視圖的大小)

謝謝!

+0

爲什麼不能在你的孩子UIView上正確設置'autoresizingMask'?畢竟,這是一個子視圖,如果你讓它成爲另一種觀點的孩子! –

+0

感謝您的回覆。 我在子視圖中做了這個: – androidkc

+0

[self setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin]; 但似乎不起作用。 – androidkc

回答

4

更新舊響應,僅提及調整掩模

自動佈局(iOS 6中)

在iOS 6中,加入自動佈局,雖然,有點難看在一個情節串連圖板/ XIB與XCode的工作。 Autolayout太大而無法解釋,但其實質是它是層次結構中視圖之間的一組規則。因此,您可以將視圖的x位置粘貼到父視圖的右邊界。見Auto Layout Programming Guide

會自動調整大小面具(iOS版2)

在尺寸檢查選項請看:

Autoresizing and positioning inside a view

這是做

myView.autoresizingMask = UIViewAutoresizingMaskFlexibleTopMargin | 
    UIViewAutoresizingMaskFlexibleLeftMargin | 
    UIViewAutoresizingMaskFlexibleWidth | 
    UIViewAutoresizingMaskFlexibleHeight; 

相當於請注意,通過代碼執行此操作和通過IB執行操作是有區別的。例如,邊界的IB自動設置爲struts,例如,選擇正確的邊框意味着「我的右邊框現在粘貼到超視圖的右邊框」。另一方面,代碼則相反,你需要指定哪些邊界不是支撐的,也就是說。他們很靈活。高度和寬度正常工作。

佈局子視圖(iOS版2,但對於iOS5的+陷阱)

如果一切都失敗了,不要開始做人工定位所有的地方,我一直在那個位置,它只是導致unmaintanable,意大利麪代碼,其中三種或更多種方法與相同的視圖屬性混淆。

取而代之,更願意在UIView -layoutSubviews上做所有的定製定位。當setNeedsLayout被觸發時,這個方法會根據需要被調用,例如,當視圖的寬度發生變化時,子視圖將獲取佈局子視圖事件。也使得實現旋轉接口變得更容易,因爲這個方法被調用了新的寬度,以確定動畫的外觀。

請記住佈局子視圖在執行自動佈局/自動調整大小的遮罩後工作。