2010-07-10 79 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

相关问题