2012-06-18 24 views
6

Tôi đã tạo UIScrollView trong bảng phân cảnh, liên kết nó dưới dạng thuộc tính cho trình điều khiển chế độ xem và hiện đang cố gắng thêm một số bản xem trước với phân trang. Nhưng, mặc dù tôi đã đặt kích thước trong bảng phân cảnh theo đồ họa, khung của UIScrollView kết thúc là 0,0,0,0. Tôi có cần phải mã hóa kích thước mặc dù tôi đã chỉ định chúng theo đồ họa trong bảng phân cảnh không?ScrollView được tạo trong bảng phân cảnh được khởi tạo với khung 0,0,0,0

Ngoài ra, loại có liên quan, có thể tùy chỉnh các bản xem phụ trong bảng phân cảnh để sử dụng trong chế độ xem cuộn này không? Dường như tôi không thể tạo ra một khung nhìn như vậy trừ khi nó đã nằm trong một bộ điều khiển. Vì tôi chỉ có một bộ điều khiển và có khả năng nhiều chế độ xem tôi muốn thiết lập đồ họa, làm cách nào để thực hiện việc này mà không phải thực hiện theo cách lập trình?

+0

Bạn đã vẽ UIScrollView như thế nào? Bạn đã vẽ nó trên ViewController của bạn hoặc hình thức miễn phí? –

+0

Tôi chỉ kéo nó vào như một đối tượng từ bảng phân cảnh lên ViewController. – user1096786

+0

Làm thế nào để bạn biết 0,0,0,0? Nó sẽ có cùng kích thước với scrollview mà bạn đã kéo vào ViewController. –

Trả lời

16

Với bảng phân cảnh viewDidLayoutSubviews là nơi bạn có thể nhận được kích thước của tất cả các chế độ xem của mình. viewWillAppear không hoạt động đối với tôi và luôn trả về (0,0,0,0);

+1

Lưu ý cũng là một thủ thuật là bạn có thể lấy kích thước của các bản xem phụ đã có ở đó và sau đó thêm mã bố cục cho các bài đánh giá của các cuộc khảo sát đó bây giờ biết khung/giới hạn. –

0

Có thể bạn đã đặt điểm ngắt trên đường mà chế độ xem chưa được thiết lập. Hãy thử điều này:

- (id)initWithCoder:(NSCoder *)coder 
{ 
    self = [super initWithCoder:coder]; 
    if (self) { 
     CGRect frame = self.scrollView.frame; 
     NSLog (@"FRAME IS %@", NSStringFromCGRect(frame)); 
    } 
    return self; 
} 
1

Tôi phát hiện ra rằng khi tôi truy cập vào scrollview trong viewWillAppear, khung sẽ thực sự cung cấp số chính xác. Trước đây tôi đã thử điều này trong awakeFromNibviewDidLoad và cũng có khung 0,0,0,0.

Điều kỳ lạ là trước Bảng phân cảnh, bạn có thể nhận được kích thước khung chính xác trong awakeFromNib. Một ví dụ về điều này là một trong các mã mẫu của Apple PageControl.

Vì vậy, trong ngắn hạn để trả lời câu hỏi, hãy thử truy cập nó từ viewWillAppear (Giả sử bạn đã tạo UIScrollView trong bảng phân cảnh).

+1

Từ thảo luận 'awakeFromNib': Thông báo awakeFromNib được gửi đến từng đối tượng được tải từ kho lưu trữ, nhưng chỉ khi nó có thể trả lời tin nhắn, và chỉ sau khi tất cả các đối tượng trong kho lưu trữ đã được nạp và khởi tạo. Khi một đối tượng nhận được một thông điệp awakeFromNib, nó được đảm bảo có tất cả các biến cá thể của nó được thiết lập. Và từ những gì tôi đã thử nghiệm tôi nhận được tham chiếu không đến cửa hàng của tôi trong phương pháp này. Vì vậy, có thể giả định này không còn đúng với bảng phân cảnh và tài liệu cần được cập nhật. Mặc dù tôi đã có khung cửa hàng của tôi được đặt trong 'viewDidLoad'. – florian

+0

Xin lỗi, tôi có vấn đề chính xác khi cố gắng kéo UIScrollView vào bảng phân cảnh và trình kiểm tra kích thước đã xác định kích thước của nó. Tuy nhiên, tôi đặt một breakpoint trong 'viewWillAppear' (không phải' viewDidLoad' !!) và nó vẫn cho biết frame là {0,0,0,0}. Mặc dù tôi có thể tự thiết lập lại nó, điều gì xảy ra khi UIScrollView được tải từ bảng phân cảnh? – Yeung

+0

Hey, tôi phát hiện ra rằng tôi có thể truy cập vào giá trị khung chính xác trong 'viewDidAppear'. Tôi đang xây dựng trong Xcode 4.5 và cho iPhone 6.0 Simulator. Không có điều gì cập nhật gây ra điều này? – Yeung

3

Với storyboards các cửa hàng của một bộ điều khiển are not connected trước viewDidLoad và kích thước của nó không được thiết lập cho đến khi viewWillAppear, xem tại đây:

http://cs193p.m2m.at/lecture-8/

Ngay sau khi bộ điều khiển là hoàn toàn thể hiện và các cửa hàng của nó là được kết nối với viewDidLoad: được gọi. Vì vậy, đây là một nơi tốt để đặt mã thiết lập. Tuy nhiên, kích thước của bộ điều khiển chưa được đặt nhưng ở chế độ xem viewWillAppear: được gọi ngay trước khi chế độ xem xuất hiện trên màn hình .

Vì vậy, tôi nghĩ đề xuất của Enricos là chính xác. Chỉ cần thử đặt các thứ liên quan đến kích thước vào viewWillAppear.

+0

viewDidLayoutSubviews cho storyboards. Xem bình luận của tôi dưới đây. –

0

Rất đơn giản: Tắt Sử dụng tính năng Tự động điền trong cài đặt Bảng phân cảnh.

Disable Use Autolayout in the Storyboard settings (red rectangle)

Các vấn đề liên quan