2012-07-27 23 views
11

Tôi có 150 UIViewController trong Bảng phân cảnh và việc cuộn giữa các Chế độ xem này quá chậm. Tôi không thể phóng to và thu nhỏ dễ dàng và phải mất một thời gian nghiêm túc để làm chuồng.Bảng phân cảnh trong Xcode quá chậm

Tôi đang trên MBPR và tôi cài đặt Xcode 4.4

Spec: 2.3GHz/16G/256 mà tôi nghĩ nó đủ để xử lý một điều như vậy.

Có bất kỳ tùy chọn, cài đặt hoặc mẹo/thủ thuật nào để có quá nhiều lượt xem trong bảng phân cảnh và không bỏ lỡ hiệu suất.

LƯU Ý: Tôi đã thực hiện tất cả các giải pháp có thể (xóa bộ nhớ cache và không gian làm việc). Không làm việc. Nó có một cái gì đó để làm với số lượng UIViewController trong Storyboard.

Cảm ơn

Update 2016: Chỉ cần cập nhật câu hỏi này là có một tính năng mới trong Xcode 7 cho phép bạn cấu trúc lại Storyboard thành nhiều Storyboards.

Refactoring Storyboards https://developer.apple.com/library/ios/recipes/xcode_help-IB_storyboard/Chapters/RefactorStoryboard.html

Nếu bạn tìm kiếm thuật ngữ "storyboards refactoring" bạn sẽ tìm thấy hướng dẫn tốt :)

+0

Bạn đã giải quyết được sự cố của mình chưa? Có lẽ bạn có thể đánh dấu câu trả lời chính xác –

+0

oh bro của tôi !!, 150 vc, cảm thấy đau: -s –

Trả lời

6

Chắc chắn sử dụng nhiều bảng phân cảnh cho điều này. Tôi không biết về bất kỳ hạn chế nào trong việc sử dụng bảng phân cảnh nhưng cố gắng hiển thị tất cả các mã giao diện người dùng đó cùng một lúc là khó khăn cho máy của bạn và cũng khó cho các nhà phát triển hiểu.

Cố gắng một cách logic divine storyboards của bạn thành các loại như: "profileSB, feedSB, mapSB, messagesSB, settingsSB"

Dưới đây là một số hướng dẫn tốt về sự sáng tạo của những:
http://spin.atomicobject.com/2014/02/18/ios-storyboards-xcode5/
http://www.skillmasters.net/main/xcode-using-multiple-storyboards/

+0

Để hoàn thành câu trả lời này trong một phiên bản mới hơn của Xcode, Refactoring Storyboards https://developer.apple.com/library/ios/recipes/xcode_help-IB_storyboard/Chapters/RefactorStoryboard.html – Maziyar

3

150 ViewControllers trong một Storyboard âm thanh awful nhiều đối với tôi. Cố gắng giảm thiểu luồng của bạn hoặc chia thành nhiều bảng phân cảnh nếu bạn thực sự cần quá nhiều

+1

Chào bạn, âm thanh khủng khiếp nhưng có bất kỳ giới hạn nào trong việc sử dụng Storyboard không? Vấn đề là không có gì về việc có bao nhiêu lượt xem trong Storyboard. Tôi đọc tất cả và không có gì cả. Tôi đã cố gắng để giảm chúng và hiển thị nội dung động nhưng nó không phải cho tôi khách hàng đã làm nó trước và tôi chỉ làm một số nâng cấp lớn. Tôi chỉ hỏi tò mò để xem có bất kỳ lời khuyên/thủ thuật xung quanh hoặc thậm chí là một giới hạn. Cảm ơn bạn đã trả lời. Và không nghĩ đến việc chia tách thành hai Storyboards. Cảm ơn. – Maziyar

1

Tôi có một số UIStoryboard với 10 hoặc nhiều hơn UIViewControllers và thêm ContainerViews. Sau khi bố cục các chế độ xem và tùy chỉnh ngày càng nhiều, số UIStoryboard ngày càng trở nên lười biếng.

Cách tiếp cận của tôi là thiết lập chế độ xem bên trong đơn UIStoryboards. Đang tải các bộ điều khiển được thực hiện bên trong đơn của tôi, nơi tôi thiết lập một NSArray với tất cả các định danh cho UIViewController đó cũng phải được thiết lập bên trong UIStoryboard:

enter image description here

Khi nạp trình đơn, tôi vòng qua NSArray và tải UIViewControllers theo số nhận dạng từ UIStoryboard cụ thể.Đây là nơi mà tôi cần thiết để thực hiện một chuyển đổi, cho khác nhau 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]; 
} 

Trong trường hợp của tôi, chỉ có một vấn đề với segues sau khi chia tay ban đầu UINavigationController từ UIViewControllers tôi. Các phân đoạn sẽ không đẩy đến một navigationController, nếu không có UINavigationController ban đầu. Đó là lý do tại sao tôi đã thêm một UINavigationController trên mỗi UIViewController (của NSArray của tôi) để UIStoryboardSegue sẽ được thực hiện chính xác. Các UINavigationController cũng không cần phải được kết nối với một lớp học, chỉ cần bao gồm nó trong UIStoryboard và kết nối nó với UIViewController đầu tiên.

7

Cách tốt nhất là chia bảng phân cảnh thành nhiều mô-đun khác nhau (mỗi mô-đun trong bảng phân cảnh riêng). Nó sẽ lấy đi những vấn đề hiệu suất mà bạn đang gặp phải và cũng có những lợi thế khác như làm cho nó dễ dàng hơn để quản lý nói chung (không có xung đột SVN lớn vv).

Tuy nhiên, tôi gặp phải sự cố khác gây ra sự chậm trễ trong bảng phân cảnh. Tôi đã có khoảng 25 bộ điều khiển xem và đã nhận được ALOT của lag - nhưng chỉ khi Xcode đang chạy trên một màn hình bên ngoài.

Tôi nhận thấy rằng nếu tôi tắt "bố cục tự động" cho bảng phân cảnh, độ trễ sẽ biến mất hoàn toàn. Tôi hoàn nguyên thay đổi này, và sau đó theo quy trình sau: -Delete một ViewController -test nếu nó vẫn tụt -Nếu vẫn Revert lag thay đổi

Cuối cùng tôi tìm thấy một ViewController nhất định mà nếu xóa dừng lại tất cả lag. Sau đó tôi đã hoàn nguyên điều này và đi qua các chế độ xem để xem chế độ xem nào gây ra độ trễ. Cuối cùng tôi thu hẹp này xuống một "UIButton" bên trong một "UIBarButtonItem". Tôi tin rằng tôi đã thay đổi thuộc tính "Loại" trên nút, và sau đó thay đổi nó trở lại và độ trễ dừng lại. Từ SVN có vẻ như khung đã được thay đổi trong tệp .storyboard. Sau thời điểm này, độ trễ không bao giờ quay trở lại.

TLDR: Độ trễ cốt truyện không phải lúc nào cũng vì bạn có quá nhiều mục trong bảng phân cảnh. Tôi quản lý để thoát khỏi một vấn đề lag bằng cách gây ra Xcode để làm lại một số bố trí.

Hy vọng trải nghiệm của tôi sẽ giúp người khác chẩn đoán/giải quyết vấn đề của họ. Tôi đã làm việc khoảng 0,5 năm trước khi tôi cuối cùng đã thực sự khó chịu và cố gắng giải quyết vấn đề.

+0

Tnx mate đó là một mẹo hay để ghi nhớ :) – Maziyar

+0

Bingo! Tôi đã có sự chậm chạp không thể tin được và bảng phân cảnh của tôi chỉ có 7 bộ điều khiển xem. Hai trong số các VC có một UIButton trong một BarButtonItem. Tôi đã xóa các nút đó và tốc độ nhanh. Bây giờ tôi biết nguyên nhân, để tìm một giải pháp ... – Swany

+0

Hey @Swany, như tôi đã nói trong bài viết của tôi, tôi loại bỏ chúng và thêm lại chúng và nó thiết lập lại các khung mà dừng lại sự chậm trễ điên rồ. Hãy thử thêm lại chúng có thể phù hợp với bạn. –