2013-08-25 52 views
5

Tôi có UIScrollView được thiết lập theo phương pháp viewDidLoad của UIViewController (Tôi sẽ gọi nó là ScrollViewController). Chế độ xem cuộn chứa các trang có nội dung ngang (tương tự như ứng dụng thời tiết gốc).Cách cuộn UIScrollView khi tải khi sử dụng bố cục tự động

Khi hiển thị chế độ xem cuộn, bạn có thể chọn trang bắt đầu. Mẫu của tôi là:

  • init a ScrollViewController. Không có gì xảy ra ở đây cả. Thuộc tính currentPage được mặc định là 0.
  • đặt scrollViewController.currentPage thành số trang mong muốn.
  • trong viewDidLoad của ScrollViewController, đọc self.currentPage và sử dụng scrollToRect hoặc setContentOffset để cuộn tương ứng.

Việc triển khai cuộn có vẻ tốt, vì tôi đang sử dụng cùng một mã ở nơi khác để chuyển đến một số trang nhất định. Nhưng khi tải đầu tiên, không có gì xảy ra (tức là, chế độ xem cuộn không được cuộn đến trang mong muốn).

tôi nghĩ Tôi đã tìm thấy lý do - có vẻ như rằng contentSize của xem di chuyển (trong đó có nguồn gốc bởi autolayout nhớ) là 0 trong viewDidLoad, và điều này dường như điều này ngăn chặn di chuyển. Nó cũng bằng 0 trong viewWillAppear. Chỉ trong viewDidAppear hiện công việc cuộn, mà tất nhiên làm cho một kinh nghiệm người dùng lẻ.

Tôi làm cách nào để giải quyết vấn đề này? Có phải nó khôn ngoan để bằng cách nào đó buộc bố trí trong viewDidLoad? Hoặc một số cách tiếp cận khác?

Trả lời

8

viewDidLayoutSubviews là những gì bạn đang tìm kiếm. Đây là phương thức mà tất cả các khung phụ đề được khởi tạo hoàn toàn. Vì vậy, hãy thử gọi phương thức thiết lập của scrollView bên trong nó, trong chế độ xem của bạnController:

-(void)viewDidLayoutSubviews 
{ 
    [super viewDidLayoutSubviews]; 
    [self setupView]; 
} 
0

Bạn sẽ có thể đặt kích thước nội dung theo cách thủ công. Bạn chèn các trang vào trong chế độ xem cuộn ở đâu? Tôi khuyên bạn nên chèn chúng vào bên trong viewDidLoad hoặc viewWillAppear và sau đó cuộn đến trang mong muốn ngay sau khi chèn chúng bằng cách đặt contentOffset.