2010-05-12 60 views
1

任何線索爲什麼我以編程方式定義UIScrollView(使用應用程序框架)總是在頂部(在navigationBar下方)留下20個像素的空白空間。我怎樣才能關閉它?應用程序框架頂部留空行

UIScrollView *vScrollView = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 
vScrollView.backgroundColor = [UIColor redColor]; 

我的屏幕看起來是這樣的:

  • 狀態欄
  • - 導航條
  • ---神祕的差距(?10px的)
  • ----我Scrollviewcontent (帶紅底色)

我該如何調用appl爲了避免這種差距,框架大小?

回答

4

我發現我使用了錯誤的幀座標「applicationFrame」。所有工作正常時,將其更改爲界限。

UIScrollView *vScrollView = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
0

你的應用程序在info.plist文件中告訴你如何使用狀態欄?它是啓用還是禁用?如果我理解正確,你看狀態欄的20個像素。

+0

它不是狀態欄,而是導航欄下方的空隙。 [[UIScreen mainScreen] applicationFrame] .origin.y上的NSLog返回20. – iFloh 2010-05-12 07:58:46

1

您是否隱藏了應用程序委託中的狀態欄?

- (void) applicationDidFinishLaunching:(UIApplication *)application { 
    [application setStatusBarHidden:YES]; 
    ... 
} 
+0

不,狀態欄可見。進一步思考,我意識到20像素最有可能是我的導航欄。 我的屏幕看起來像這樣:(?10px的) - - 狀態欄 導航條 ---神祕的差距 ----我Scrollviewcontent(用紅色背景色) – iFloh 2010-05-12 08:01:36

+0

你的導航欄將超過20像素高,除非你以某種方式定製它。狀態欄高20像素,可能是排除故障的好選擇。 – 2010-05-12 08:05:58

+0

我現在將[[UIScreen mainScreen] applicationFrame] .origin.y覆蓋爲零,即使我的直覺告訴我這不是一個乾淨的方法... – iFloh 2010-05-12 08:19:33

2

UIScreen-applicationFrame是移除狀態欄(時鐘)的全屏矩形。由於您的滾動視圖位於導航控制器的視圖區域內,因此您需要在內部視圖的座標空間中使用座標。

即使使用UIScreen-bounds也不會給你相當正確的結果,因爲該矩形將是屏幕的全部大小,包括導航欄應該佔用的空間。使用-bounds,你會發現你的UIScrollView實際上運行在屏幕底部64像素。

假設你正在創建中的UINavigationController的-loadView方法滾動視圖,這樣的事情應該工作:

- (void)loadView { 
    [super loadView]; 
    UIScrollView *sv = [[UIScrollView alloc] initWithFrame:self.view.bounds]; 
    [self.view addSubview:sv]; 
    [sv release]; 
} 
0

我遇到了類似的問題,與被編程方式創建的UIScrollView。我需要scrollview內容顯示在狀態欄下面從x-0 & y-0開始。它一直在工作,直到我將我的ViewController嵌入到導航控制器中。導航欄對於所有屏幕都是隱藏的。但是,然後UIScrollView有20像素的神祕頂部空白。試了一下,但下面的代碼行爲我工作。

self.automaticallyAdjustsScrollViewInsets = NO; 

添加上面在我的viewDidLoad方法上面我創建UIScrollView。希望這可以幫助像我這樣的人。

編輯:

找到一種方法來做到這一點在界面生成器:

  • 選擇包含的UIScrollView視圖控制器。
  • 打開屬性檢查器。
  • 取消選中「調整滾動查看插圖」。在「視圖控制器」部分下。