我有一大堆的問題:UIView的定位相關的問題(IOS)
- 我如何定位一個UIView,以便它是我將它添加到視圖的底部?
- 如何添加一個子視圖到一個視圖,以便它位於超級視角的一個小間隙的角落(如果我想要一個'x'十字標誌來關閉某個東西)
- 是他們的實用程序類爲了方便UIView定位(和旋轉)?
任何參考資料,開源教程等將更受歡迎!
我有一大堆的問題:UIView的定位相關的問題(IOS)
任何參考資料,開源教程等將更受歡迎!
(一)我如何定位一個UIView,使它是在我添加到視圖的底部?
OK,讓我們說你要定位button
截至視圖form
底部的子視圖,您可以通過從的form
CGRect buttonFrame = button.frame;
buttonFrame.origin.y = form.bounds.size.height - buttonFrame.size.height;
button.frame = buttonFrame;
[form addSubview:button];
您可以高度減去按鈕的高度計算子視圖button
的origin.y
改變原點水平位置。你想要它在form
的左下角?
buttonFrame.origin.x = 0;
或者在form
的右邊?
buttonFrame.origin.x = form.bounds.size.width - buttonFrame.size.width;
還是在中間(水平方向)form
?
buttonFrame.origin.x = (form.bounds.size.width - buttonFrame.size.width)/2;
或使用CGRectGetMidX
(在CGGeometry utility methods找到)另一種方法:
buttonFrame.origin.x = CGRectGetMidX(form.bounds) - buttonFrame.size.width/2;
處理自動調整大小調節框架的父視圖的大小發生變化時。但是你仍然必須先定位它。
您可以在Interface Builder中使用iOS 6的新Autolayout功能或舊的Struts & Springs來實現此功能。
或者你可以通過編程設置自動尺寸調整掩碼。這說明相當不錯的位置: UIView autoresizingMask - Interface Builder to Code - Programmatically create struts and springs - Swift or Objective-C
你可以在iOS6的,但如果你想要的工作,你需要將它們手動定位舊操作系統的設置限制。數學。
設置框架很簡單,例如, (未經測試的代碼)
subview.frame = CGRectMake((superview.frame.origin.x - subview.frame.origin.size.width/2)-20, (superview.view.frame.origin.y - subview.frame.origin.size.height/2)-20, subview.view.frame.size.width, subview.view.frame.size.height);
如果您要做很多工作,然後創建實用程序類或方法。
如果超視圖的大小發生變化,Autolay將幫助您定位視圖並保留這些位置。如果上海華是不會改變的,你並不真的需要有約束的混亂 - 你可以設定子視圖appropra的viewA
位置
如果要添加視圖viewB
查看:
一)移動到位置viewB
,以便它的底邊對應的viewA
底邊:
viewB.frame.origin.y = viewA.bounds.size.height - viewB.bounds.size.height;
b)你不說哪個角落,但它只是一個做數學的問題。例如,viewA
的右上角在viewA的座標系中爲{viewA.bounds.size.x, 0}
。如果你想要把viewB
那裏,設置它的原產地:
{viewA.bounds.size.x-viewB.bounds.size.x, 0}
如果你想添加一個餘量,可以添加到計算:
int margin = 10;
{viewA.bounds.size.x-viewB.bounds.size.x-margin, margin}
d)使用NSLayoutConstraint訪問以編程方式自動佈局系統的約束。有一個很好的visual format language,這樣對於你的問題(一)你可以爲viewA
設置約束:
V:|-[viewB]-0-|
的V
意味着你在垂直方向上工作,|
的代表邊(上和底層,上海華盈的感謝V
)(這是viewA
),以及0
意味着viewB
和它的父的底部之間的距離應爲0
int xOffset = 20;
int yOffset = 20;
CGRect BottomRight_NewFrame = CGRectMake((superview.frame.size.width - subview.frame.size.width-xOffset), (superview.frame.size.height - subview.frame.size.height-yOffset), subview.frame.size.width, subview.frame.size.height);
subview.frame = BottomFrame;
我希望一切都以編程方式完成,討厭依靠IB :( – s6luwJ0A3I 2013-03-08 14:00:27
怎麼樣在代碼中設置自動識別掩碼? – RaffAl 2013-03-08 14:07:40