2013-03-08 36 views
0

我有一大堆的問題:UIView的定位相關的問題(IOS)

  1. 我如何定位一個UIView,以便它是我將它添加到視圖的底部?
  2. 如何添加一個子視圖到一個視圖,以便它位於超級視角的一個小間隙的角落(如果我想要一個'x'十字標誌來關閉某個東西)
  3. 是他們的實用程序類爲了方便UIView定位(和旋轉)?

任何參考資料,開源教程等將更受歡迎!

回答

1

(一)我如何定位一個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]; 

您可以高度減去按鈕的高度計算子視圖buttonorigin.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; 

處理自動調整大小調節框架的父視圖的大小發生變化時。但是你仍然必須先定位它。

0

您可以在Interface Builder中使用iOS 6的新Autolayout功能或舊的Struts & Springs來實現此功能。

本教程將介紹兩種: http://msmvps.com/blogs/kevinmcneish/archive/2012/12/10/tutorial-ios-6-auto-layout-versus-springs-and-struts.aspx

或者你可以通過編程設置自動尺寸調整掩碼。這說明相當不錯的位置: UIView autoresizingMask - Interface Builder to Code - Programmatically create struts and springs - Swift or Objective-C

+0

我希望一切都以編程方式完成,討厭依靠IB :( – s6luwJ0A3I 2013-03-08 14:00:27

+0

怎麼樣在代碼中設置自動識別掩碼? – RaffAl 2013-03-08 14:07:40

-1

你可以在iOS6的,但如果你想要的工作,你需要將它們手動定位舊操作系統的設置限制。數學。

0

設置框架很簡單,例如, (未經測試的代碼)

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); 

如果您要做很​​多工作,然後創建實用程序類或方法。

0

如果超視圖的大小發生變化,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

1
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;