设置位于导航/标签栏之间的UIScrollView框架

时间:2012-08-15 16:40:49

标签: iphone objective-c ios uiscrollview

正如标题所解释的那样,我正在我的视图控制器的loadView中以编程方式创建一个UIScrollView,然后我将设置为self.view。

_pagingScrollView = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.view = _pagingScrollView;

如果我在loadView结束时检查_pagingScrollView.frame,它等于

{{0,0},{320,480}}。

但是,如果我在scrollViewDidScroll委托中检查相同的属性,则会切换到

{{0,0},{320367}}

如何分配/初始化我的scrollView,以便它的高度从一开始就将tab / nav栏考虑在内,并给我367?我知道我可以简单地硬编码367,但我想知道这里发生了什么以及为什么它从一个值开始然后改变。

2 个答案:

答案 0 :(得分:1)

为什么不创建具有已知边界的UIScrollView

_pagingScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0,0,320,387];

或从UIScreen边界

中减去TabBar或NavBar的高度

答案 1 :(得分:0)

我相信你看到的问题是由你使用[UIScreen mainscreen]引起的,它引用了整个窗口(320,480)并且不关心它内部的Nav / Tab视图。

您可能希望使用applicationFrame方法,而不是使用它。

请参阅此相关帖子 - How to get the actual [UIScreen mainScreen] frame size?

此外,如果您的vc的superView / superViewController已设置,您可以使用它们来获取更相关的大小信息,因为MainScreen仍将仅引用整个窗口,而不是采用子视图控制器,例如导航/标签。