我想在窗口坐标系中获取scrollView的原点。例如,目前,scollView的起源是(0,51)。但是在窗口坐标系中它应该是51 + 44(导航栏高度)+20(状态栏高度)= 115.窗口坐标系中的意思是scrollView.frame.origin应该是(0,115)。我尝试使用convertPoint:方法,但有时会得到(0,51)或(0,0)。请提供解决方案。感谢
答案 0 :(得分:54)
听起来你没有在正确的观点之间进行转换。视图的框架设置为其超视图的坐标,而不是其自己的内部坐标,因此如果您尝试将视图的原点转换为窗口坐标,则需要使用超视图:
[[self superview] convertPoint:self.frame.origin toView:theWindow];
然而,将零点从视图本身转换为窗口更为简单。这两段代码是等价的,因此根本不需要使用原点。
[self convertPoint:CGPointZero toView:theWindow];
答案 1 :(得分:10)
我尝试使用TechZen解决方案,但无济于事。我没有转换scrollView的原点,而是引用了apple docs UIWindow类Reference,并使用此代码[self.view convertPoint:endCentre fromView:[UIApplication sharedApplication].keyWindow]
将键盘的endCenter转换为我的视图坐标系。这段代码工作,因此解决了我的问题。 然而,问题仍然是为什么它没有给出scrollView.origin.So的正确坐标,基本上我通过转换键盘endcenter而不是scrollView.origin 得到了一个解决方法。哦,我正在做所有这些事情,以便在键盘出现在屏幕上时计算我的scrollView的新高度。所以,如果有人能解决这个问题或任何更好的解决方案,请让我们所有人都知道。
答案 2 :(得分:6)
请注意,这些功能仅在视图控制器完成布局子视图后才起作用。因此,如果您希望在加载视图时使用,则可以使用viewDidLayoutSubviews / viewDidAppear,但不能使用viewDidLoad / viewWillAppear等...
此代码对我有用:
- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
CGPoint originInSuperview = [self.view.superview convertPoint:CGPointZero fromView:self.scrollView];
}