2010-08-17 70 views
0

在區間索引的UITableView如何做才能讓你選擇的部分的標題(按節索引)屏幕(的最頂端對齊_not_導航下控制器),而是在頂部的導航欄標題之後刷新?的UITableView navigationController節索引對齊後,導航標題

這樣的:


[按鈕]導航頁眉在屏幕的頂部[其他按鈕]
X(節號)部分內
項....

爲了清楚起見,我遇到的問題是,當右側的部分索引被按下時,表格將該部分滾動到的頂部屏幕,隱藏在的下面navigat離子棒。我想這節頭精確導航頭觸摸導航欄邊框與科信行的頂部 - 因爲它是例如,當表第一次出現。

回答

1

更好的解決方案:

a)睡一覺。

B)意識到這一點,當你睡覺時,使用的'UIBarStyleBlackTranslucent'一直棄用,所以簡單地做這個:

  • 開放的MainWindow.xib在Interface Builder中,在'Tab Bar Controller'內的'導航控制器'內選擇'UINavigationBar'項目,並將'Style'更改爲'Black Opaque'而不是半透明。
  • 在你的UITableViewController類文件,寫

    - (void)viewWillDisappear:(BOOL)animated { 
    self.navigationController.navigationBar.translucent = YES; /* Yes, go underneath the Navigation Bar elsewhere if you want to. */ 
    [super viewWillDisappear:animated]; 
    } 
    - (void)viewWillAppear:(BOOL)animated { 
    self.navigationController.navigationBar.translucent = NO; /* No going underneath the Navigation Bar. Problem solved! */ 
    ... 
        [super viewWillAppear:animated]; 
    } 
    

三)停止的感覺尷尬,而是實現睡眠,現在是如何在你的軍火庫一個更有用的編碼技術。 ,P


線索到正確的解決方案:

「導航控制器從未顯示一個不透明導航欄下內容」。

「將導航控制器的半透明屬性設置爲YES,這可以讓您的內容覆蓋導航欄。」

見:developer.apple.com/iphone/library/featuredarticles/ViewControllerPGforiPhoneOS/NavigationControllers/NavigationControllers.html

見:developer.apple。COM/iphone /庫/文件/ UIKit的/參考/ UINavigationBar_Class /參考/ UINavigationBar.html#// apple_ref/OCC/instp/UINavigationBar的/半透明

UIBarStyle定義不同類型的視圖的樣式外觀...

UIBarStyleBlackTranslucent = 2,//棄用

使用UIBarStyleBlack和半透明屬性設置爲YES代替。

http://developer.apple.com/iphone/library/documentation/uikit/reference/UIKitDataTypesReference/Reference/reference.html


睡覺,固定它 「辛苦」 ...

- (void)correctFrame:(UIView *)viewWithWrongFrame { 
    CGRect correctedFrame = [[viewWithWrongFrame superview] frame]; 
    correctedFrame.size.height = correctedFrame.size.height - self.navigationController.navigationBar.frame.size.height; /* Height without Navigation Bar */ 
    correctedFrame.origin.y = correctedFrame.origin.y + self.navigationController.navigationBar.frame.size.height; /* Origin below Navigation Bar */ 
    [viewWithWrongFrame setFrame:correctedFrame]; 
} 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
    ... 
    [self correctFrame:[self.navigationController.view.subviews objectAtIndex:0]]; /* Correct the frame so it is after the Navigation Bar */ 
    [self.tableView setContentInset:UIEdgeInsetsMake(-self.navigationController.navigationBar.frame.size.height, 0, 0, 0)]; /* Eliminate initial blank space at top.*/ 
    ... 
} 

- (void)cleanDisplay { 
    [self.tableView setContentInset:UIEdgeInsetsZero]; /* Fix difference between horizontal and vertical orientation. */ 
    ... 
} 
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration { 
    [self correctFrame:[self.navigationController.view.subviews objectAtIndex:0]]; /* Correct the frame so it is after the Navigation Bar */ 

    /* Clean the display after turning... */ 
    [self performSelectorOnMainThread:@selector(cleanDisplay) withObject:nil waitUntilDone:NO]; 
} 
- (void)viewWillAppear:(BOOL)animated { 
    ... 
    [self performSelectorOnMainThread:@selector(cleanDisplay) withObject:nil waitUntilDone:NO]; 
    ... 
} 

注意失敗方法包括:

使用一世nterface Builder將UITableView嵌入到UIView中。沒有工作,因爲它全部自動調整到全高。調整[self.tableView superview] .frame = CGRectInset([self.tableView superview] .frame,44,44); 或.bounds沒有效果, 既沒有self.tableView.frame也沒有.bounds。

當我嘗試時出現錯誤的線索: self.navigationController.view.frame = CGRectInset(self.navigationController.view.frame,20,44); 它實際上改變了其中的表的視圖的大小。顯然,將子視圖更改爲可以修復原始問題。

用上面的方法修正了它。雖然在移回或轉到其他屏幕之前,需要將變化恢復到正常狀態,以避免將元素轉移到其他地方。