2013-10-25 38 views
14

我有與topLayoutGuide方法奇怪的問題,我有一個情況下使用,其中setAutomaticallyAdjustsScrollViewInsets:不起作用。爲了縮小問題的原因,我創建了以下最小示例,它只是設置了基本表視圖進行測試:調用topLayoutGuide完全斷裂滾動?

  1. 在Xcode中設置新的iOS Single View應用程序。
  2. 在ViewController.m的實現將以下代碼粘貼:

    @implementation ViewController 
    
    - (void)loadView 
    { 
        [self setTableView:[[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]]; 
    } 
    
    - (void)viewDidLoad 
    { 
        [super viewDidLoad]; 
        [self setAutomaticallyAdjustsScrollViewInsets:NO]; // [*] 
    } 
    
    - (void)viewDidLayoutSubviews 
    { 
        UITableView *tableView = [self tableView]; 
    
        UIEdgeInsets insets = [tableView contentInset]; 
        // insets.top = [[self topLayoutGuide] length]; // [1] 
        // insets.top = 100;       // [2] 
    
        [tableView setContentInset:insets]; 
        [tableView setScrollIndicatorInsets:insets]; 
    } 
    
    #pragma mark - Table view data source 
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
    { 
        return 100; 
    } 
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
        static NSString *CellIdentifier = @"Cell"; 
    
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    
        if (cell == nil) { 
         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
        } 
    
        [[cell textLabel] setText:[NSString stringWithFormat:@"%d", [indexPath row]]]; 
    
        return cell; 
    } 
    
    @end 
    

說我遇到的問題是這些:

  1. 如果我取消標記[1]行,正確的插入應用,但滾動表視圖不再起作用。當我嘗試滾動,表只是反彈回到初始滾動位置後,我鬆開了我的手指。這種行爲也由一個普通的呼叫觸發[self topLayoutGuide],不分配結果的任何東西。

  2. 如果我取消線[2][1]代替,滾動的作品。 100磅的插圖也適用。但是現在初始的滾動位置會自動調整,以便內容在狀態欄下方。

[*]:這確實似乎只在做結合有含導航控制器什麼我似乎沒有讓在這個例子中有差別,但我想禁用任何自動行爲只是要確定。 。)

有什麼明顯我做錯了嗎?我真的很茫然。

+4

我只是發現了從改變正確的值到'{0,0}'。不知道爲什麼會發生這種情況,雖然... – tajmahal

+2

可能是一個錯誤,也有一個。 – cschwarz

+2

這裏一樣的東西。這令人難以置信的令人沮喪。感覺像舊版iOS 3.0一樣。 – Nicky

回答

11

這絕對是iOS 7中的一個錯誤(似乎並未在7.1中修復),但似乎隻影響UITableViewControllers。我轉而使用UIViewController與嵌入式UITableView,因爲我沒有使用靜態單元,也不需要UITableViewController爲您提供的任何'魔術'。

一旦我手動連接UITableViewDataSourceUITableViewDelegate,我就能夠開始使用self.topLayoutGuide而不會搞亂tableView的contentSize。

這是一個可以接受的解決辦法,我直到蘋果修復了這個bug。

2

同樣的事情,而不是得到topLayoutGuide給我,試試這個:在調用`[自topLayoutGuide]`導致表視圖的`contentSize`財產

CGFloat topOffset = CGRectGetMaxY(self.refController.navigationController.navigationBar.frame);