2013-12-20 41 views
4

我在Storyboard中創建了一個UITableViewController,然後將一個Activity Indicator View拖動到控制器中(併爲它創建了一個出口),在一些json內容加載之前和之後開始和停止動畫。居中活動指標查看到UITableView

我可以看到ajax spinner工作正常,但它直觀地顯示在我的導航器/標題區域下方,當我試圖居中時,它顯示居中寬度明智,出現在最靠近狀態區域的頂部。 。

我嘗試,企圖居中下面......下面就讓我們來看看我viewDidLoad

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.listLoader.center = CGPointMake([UIScreen mainScreen].bounds.size.width/2,[UIScreen mainScreen].bounds.size.height/2); 
    UITableView *appDelegate = (UITableView *)[[UIApplication sharedApplication] delegate]; 
    [appDelegate.window addSubview:self.listLoader]; 

    self.operationQueue = [NSOperationQueue new]; 
    NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(getPosts) object:nil]; 
    [self.operationQueue addOperation:operation]; 
} 

請注意,我的兩個startAnimatingstopAnimating載我getPosts方法中和執行在主線程上。所以,爲了避免混淆,我實際上可以看到微調,它只是進入狀態區。事實上,如果我刪除線......似乎

self.listLoader.center = CGPointMake([UIScreen mainScreen].bounds.size.width/2,[UIScreen mainScreen].bounds.size.height/2); 
UITableView *appDelegate = (UITableView *)[[UIApplication sharedApplication] delegate]; 
[appDelegate.window addSubview:self.listLoader]; 

的微調,導航欄的正下方...

究竟如何我中心這個???我想上面的方法可以工作,但顯然它不工作....

+0

嘗試在viewWillAppear中設置您的居中核心。看看它是否有效,我經常遇到元素加載時遇到的麻煩,這些元素以我期望加載的不同方式加載。 – Pochi

+0

嘗試過,但它看起來像我在viewDidLoad中保持居中一樣。 –

回答

3

你的問題是UITableViewController處理單個tableView,tableViews是特殊類型的scrollviews,這取決於內容。將東西添加到tableviews是非常罕見的,這就是爲什麼您使用原型單元格並更改這些單元格的原因。沒有「不安全」的方式來做到這一點。

執行此操作的正確方法是,具有帶有tableview的普通ViewController和具有該指示器的視圖。那麼使viewcontroller符合數據源和委託協議來處理tableview。

如果你仍然想使用tableviewcontroller,這就是這麼少哈克方法:

UITableView Activity Indicator the Apple way

+0

非常豐富的答案。謝謝。 –

1

刪除UIView在您的ViewController大小正是你想要的大小如何UITableView的大小。

UITableView放在UIView上。正確調整大小。

現在,將UIActivityIndicator拖入。使其成爲UIView的子視圖,但在視圖列表中顯示爲低於UITableView(所以它被繪製在表格上)。現在找到以它爲中心的x/y,並在設置中(故事板上)手動添加這些數字。

+0

之前我已經在這個方法中完成了它,但是這個方法對我來說非常'黑客',並且我相信在UITableViewController中定位活動指示符的方法比做這種事情要好。 –

+0

雖然我同意它是'hacky',但是您可能會發現,在某些時候,您將不得不像這樣做'UITableView',因爲蘋果應該解決的其他原因(如額外有時在標題中有空格)。 – nhgrif

1

盡我所遇到:

// Center 
CGFloat x = UIScreen.mainScreen.applicationFrame.size.width/2; 
CGFloat y = UIScreen.mainScreen.applicationFrame.size.height/2; 
// Offset. If tableView has been scrolled 
CGFloat yOffset = self.tableView.contentOffset.y; 
self.activityView.frame = CGRectMake(x, y + yOffset, 0, 0); 

在以下定義: IOS: ActivityIndicator over UITableView... How to?

最主要的是如何獲得當前可見的滾動區域的中心和上面的一段代碼可以完全實現,之後您可以輕鬆定位進度視圖窗口。

這很簡單,沒有黑客解決方案。