2012-07-27 47 views
11

我在Storyboard中有150個UIViewController,並且在這些Views之間滾動很慢。我無法輕鬆放大和縮小,並且需要一段時間才能完成麥粒腫。Xcode中的故事板很慢

我在MBPR,我安裝的Xcode 4.4

規格:2.3GHz的/ 16G/256,我認爲這是足以應付這樣的事情。

是否有任何選項,設置或提示/技巧在故事板中擁有如此多的視圖,並且不會錯過性能。

注:我已經完成了所有可能的解決方案(刪除緩存和工作區)。沒有工作。它與Storyboard中的UIViewController的數量有關。

感謝

更新2016:因爲有在Xcode 7的新功能,可以讓你的故事板重構爲多個故事板只是爲了更新這個問題。

重構故事板 https://developer.apple.com/library/ios/recipes/xcode_help-IB_storyboard/Chapters/RefactorStoryboard.html

如果你搜索術語「重構故事板」,你會發現好的教程:)在一個故事板

+0

你已經解決了你的問題?也許你可以標記正確的答案 – 2015-03-26 12:21:05

+0

哦,我的兄弟!!,150 vc,感覺疼痛:-s – 2016-10-25 14:54:01

回答

6

絕對使用這個多個故事板。我不知道使用故事板有任何限制,但試圖一次呈現所有這些UI代碼對於您的機器來說很難,而且開發人員也很難理解。

嘗試邏輯占卜你的故事板進行分類,如: 「概貌,feedSB,mapSB,messagesSB,settingsSB」

這裏是創造這些一些很好的教程:
http://spin.atomicobject.com/2014/02/18/ios-storyboards-xcode5/
http://www.skillmasters.net/main/xcode-using-multiple-storyboards/

+0

要在較新版本的Xcode,重構故事板中完成這個答案https://developer.apple.com/library/ios/recipes/xcode_help-IB_storyboard/Chapters/RefactorStoryboard.html – Maziyar 2017-07-25 13:52:12

3

150 ViewControllers聽起來很可怕對我很重要。 儘量減少你的流量或分裂成多個故事板,如果你真的需要這麼多

+1

你好,隊友,聽起來很糟糕,但是在使用Storyboard方面有什麼限制嗎?事情是沒有什麼可以在故事板中有多少個視圖。我把它們都讀了,沒有任何東西。我試圖減少它們並動態地顯示內容,但它不適合我之前做的客戶端,而只是進行一些重大升級。我只是出於好奇而問,看看是否有任何提示/技巧或甚至是限制。感謝您的回覆。並沒有想到分裂成兩個故事板。謝謝。 – Maziyar 2012-08-23 07:30:39

1

我有一個UIStoryboard與10個或更多UIViewControllers和另外ContainerViews。在佈局視圖和定製越來越多之後,UIStoryboard變得越來越懶惰。

我的方法是設置單個內部視圖UIStoryboards

enter image description here

當加載菜單,我遍歷NSArray和:加載控制器是我的菜單,在這裏我設置的NSArray與所有標識符爲UIViewController這也必須是UIStoryboard內設置內部完成通過來自特定UIStoryboard的標識符加載UIViewControllers。這是我需要執行一個開關,不同UIStoryboards的地方:

self.arrayVCAll = [NSMutableArray new]; 
for (NSArray *array in _arrayViewControllerAll){ 

    NSMutableArray *arrayTemp = [NSMutableArray new]; 

    for (UIViewController *vc in array){ 
     NSString *strViewController = [NSString stringWithFormat:@"%@", vc]; 
     UIStoryboard *storyboard; 

     if([strViewController isEqualToString:@"CustomOneStoryboard"]){ 
      storyboard = [UIStoryboard storyboardWithName:@"FirstVC" bundle:nil]; 

     } else if([strViewController isEqualToString:@"CustomTwoStoryboard"]){ 
      storyboard = [UIStoryboard storyboardWithName:@"SecondVC" bundle:nil]; 

     } else { 
      storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
     } 

     UIViewController *controller = [storyboard instantiateViewControllerWithIdentifier:strViewController]; 

     MyNavController *nav = [[MyNavController alloc] initWithRootViewController:controller]; 
     [arrayTemp addObject:nav]; 
    } 

    [self.arrayVCAll addObject:arrayTemp]; 
} 

在我的情況下,只是一個與我UIViewControllers分離初始UINavigationController後塞格斯問題。如果沒有初始的UINavigationController,segges不會推送到navigationController。這就是爲什麼我添加UINavigationController每個UIViewController(我的NSArray),所以UIStoryboardSegue將正確完成。 UINavigationController也不需要連接到一個類,只需將其包含在UIStoryboard內並將其連接到第一個UIViewController即可。

7

將故事板分成許多不同的模塊(每個模塊在單獨的故事板中)被認爲是最佳實踐。它將消除你遇到的這些性能問題,並且還具有其他優點,例如使其更容易管理(不存在大規模的SVN衝突等)。

但是我有另一個問題導致故事板滯後。我有大約25個視圖控制器,並且正在接收ALOT延遲 - 但只有當Xcode在外部顯示器上運行時纔會發生。

我注意到,如果我禁用故事板的「自動佈局」,滯後將會完全消失。我恢復了這一變化,並遵循以下流程: - 刪除一個視圖控制器 -test如果它仍然落後於 - 如果仍然laggy還原更改

最終我找到了一定的ViewController這要是刪除停止了所有的滯後。然後我回過頭來看看哪些觀點造成了滯後。我最終將其縮小到「UIBarButtonItem」中的「UIButton」。我相信我改變了按鈕上的「Type」屬性,然後將它改回來,滯後停止。從SVN看來,這個框架在.storyboard文件中被改變了。在這之後,滯後再也沒有回來。

TLDR: 故事板滯後並不總是因爲故事板中有太多項目。我設法通過讓Xcode重新做一些佈局來擺脫滯後問題。

希望我的經驗能幫助別人診斷/解決他們的問題。在工作了大約0.5年之後,我終於感到非常惱火併試圖解決問題。

+0

Tnx隊友這是一個很好的提示要記住:) – Maziyar 2015-08-17 16:52:46

+0

賓果!我有令人難以置信的緩慢,我的故事板只有7個視圖控制器。兩個VC在BarButtonItem中有一個UIButton。我刪除了這些按鈕和即時速度。現在我知道原因,找到一個解決方案... – Swany 2015-08-31 20:07:21

+0

嘿@Swany,正如我在我的帖子中說的那樣,我刪除了它們並重新添加它們,並重置了阻止瘋狂滯後的幀。嘗試重新添加它可能適合你。 – 2015-08-31 20:49:13