2010-07-10 32 views
26

我想在窗口座標系中獲取scrollView的原點。例如,目前,scollView的原點是(0,51)。但在窗口座標系中,它應該是51 + 44(導航欄高度)+20(狀態欄高度)= 115。在窗口座標系中,scrollView.frame.origin應該是(0,115)。我嘗試使用convertPoint:方法,但有時會得到(0,51)或(0,0)。請爲此提供解決方案。謝謝將UIView原點轉換爲其窗口座標系

+0

斯威夫特版本向下跌破 – 2015-11-23 19:58:26

回答

9

我試着用TechZen解決方案但無濟於事。我沒有轉換scrollView的原點,而是使用此代碼[self.view convertPoint:endCentre fromView:[UIApplication sharedApplication].keyWindow]將AppleDocument UIWindow class Reference引用並將鍵盤的endCenter轉換爲我的視圖的座標系。這段代碼起作用,因此解決了我的問題。 但是,問題仍然是爲什麼它沒有給出scrollView.origin.So的適當座標,基本上我通過轉換鍵盤endcenter而不是scrollView.origin得到了解決方法。哦,我正在做所有這些工作,以便在鍵盤出現在屏幕上時計算我的scrollView的新高度。所以,如果有人有解決這個問題或更好的解決方案,請讓我們所有人知道。

+1

得到任何解決方案>?我有同樣的問題 – Jasmeet 2014-06-30 07:29:45

+0

更好的解決方案:https://github.com/michaeltyson/TPKeyboardAvoiding – Hemang 2017-05-10 07:35:37

47

這聽起來像你沒有轉換適當的意見。視圖的框設置爲它的上海華盈,而不是它自己的內部座標,所以如果你想轉換一個視圖窗口座標原點,你就需要使用上海華盈的座標:

[[self superview] convertPoint:self.frame.origin toView:theWindow]; 

然而,將視圖本身的零點轉換到窗口更加簡單。這兩段代碼是等價的,所以根本不需要使用原點。

[self convertPoint:CGPointZero toView:theWindow]; 
+0

我在viewDidLoad方法中嘗試了這段代碼,self被self.view替換,theWindow被self.view.window替換,但它給出(0,0)作爲輸出 – Nishit 2010-07-10 15:19:55

+0

我會檢查視圖的window屬性不是零。它通常是。 – TechZen 2010-07-10 16:52:07

+1

感謝您的回覆。如何處理這個問題。我嘗試用[UIApplication sharedApplication] .keywindow替換self.view.window,但無濟於事。 – Nishit 2010-07-11 14:58:29

5

請注意,這些功能只會在視圖控制器完成子視圖佈局後才起作用。所以,如果你想,當視圖加載,你可以使用viewDidLayoutSubviews/viewDidAppear,但不是在viewDidLoad中/ viewWillAppear中等等

此代碼爲我工作:

- (void)viewDidLayoutSubviews 
{ 
    [super viewDidLayoutSubviews]; 

    CGPoint originInSuperview = [self.view.superview convertPoint:CGPointZero fromView:self.scrollView]; 
} 
2

雨燕2.1:

在viewDidAppear(否則元素還不分層)您的ViewController的:

 var yourFrame = yourScrollView.convertRect(yourScrollView.frame, toView: self.view) 

     //PRINT THE WHOLE RECT 
     print(yourFrame) 

     //PRINT A DETAILED VERSION OF THE FRAME, ALSO CAN PERFORM CALCULATION BETWEEN THE RECT PARAMETERS TO GET , FOR EXAMPLE, WIDTH POINT IN THE SUPERVIEW: 
     print("X: \(yourFrame.origin.x) Y: \(yourFrame.origin.y) WIDTH: \(yourFrame.width) HEIGHT: \(yourFrame.height)") 
+4

在Swift 3中: var yourFrame = yourScrollView.convertRect(yourScrollView.frame,to:self.view) – Medhi 2016-10-26 10:02:24