2012-09-21 32 views
8

Tôi đang làm việc với dự án được nhắm mục tiêu cho iOS 6, sử dụng bảng phân cảnh và bố cục tự động. Trong bảng phân cảnh có nhiều nơi mà một UITableView được thêm vào dưới dạng một chế độ xem con cho chế độ xem bộ điều khiển chế độ xem. Chế độ xem bảng này sử dụng các ô mẫu từ bảng phân cảnh.UITableView trong bảng phân cảnh không cập nhật kích thước nội dung khi xoay

Vấn đề chúng tôi đang gặp phải là nếu bộ điều khiển xem ban đầu được tải theo hướng ngang và sau đó thiết bị được xoay sang dọc, chế độ xem bảng bắt đầu cuộn theo chiều dọc và chiều ngang. Các ô xem bảng được vẽ với kích thước chính xác nhưng có thêm khoảng trắng ở bên phải.

Dường như trong khi khung và giới hạn của chế độ xem bảng đang được cập nhật với kích thước chính xác khi xoay vòng, kích thước nội dung của khung nhìn bảng không được. Bất kể bất kỳ thay đổi luân phiên cập nhật nào, kích thước nội dung vẫn giữ nguyên kích thước.

Sự cố không hiển thị chính nó nếu sử dụng các ô xem bảng có lập trình. Một vài công việc sặc sỡ xung quanh tôi đã tìm thấy, 1.) gọi reloadData hoặc reloadRowsAtIndexPaths: withRowAnimation: 2.) tự thiết lập thuộc tính contentSize.

Cả hai điều này có vẻ ít lý tưởng.

Tôi đã thêm điều này link to a dead simple sample project thể hiện sự cố này. Những thay đổi duy nhất được thực hiện là bảng phân cảnh và triển khai bộ điều khiển chế độ xem chính.

Trước khi luân chuyển Before rotation Sau khi xoay After rotation

+0

Tôi đang bối rối. Trong ví dụ của bạn có vẻ như nó đang hoạt động. – mkral

+0

@mkral nó bị hỏng cho tôi khi chạy Xcode 4.5. Nếu bạn khởi chạy ứng dụng ở chế độ ngang, sau đó xoay sang dọc, chế độ xem bảng sau đó sẽ cuộn theo chiều dọc và chiều ngang. – Paul

+0

OK, tôi câm. Tôi khó khăn chân dung-to-cảnh quan là vấn đề. Tôi chưa bao giờ quay lại. – mkral

Trả lời

6

Tôi đang gặp vấn đề tương tự - không thể dường như tìm thấy bất kỳ câu trả lời liên quan đến tài liệu này. Tôi đã kết thúc bằng cách sửa đổi nội dung UITableView contentSize theo cách thủ công như bạn đã đề cập trong:

- (void) viewWillLayoutSubviews 
{ 
    self.tableView.contentSize = CGSizeMake(self.tableView.frame.size.height, self.tableView.contentSize.height); 
} 
+0

Tôi không thể thực hiện công việc này cho vấn đề của mình. Tôi nhìn thấy về cơ bản cùng một vấn đề, trong bố cục Master-Detail. Tôi có một UIViewController trong bộ điều khiển chi tiết, trong đó có một tableview. Khi tôi xoay iPad, chế độ xem bảng đơn giản sẽ không thay đổi kích thước. –

+0

Tôi đang đọc Hướng dẫn về iOS6 của Ray Wenderlich và các công cụ bố cục tự động có nội dung cụ thể về các bảng. Đã không thử nó ra được nêu ra, nhưng có vẻ như các công cụ bảng thực sự có thể phải được thiết lập một cách riêng biệt, và sau đó được nạp vào một container trong UIViewController. Tôi không chắc chắn về điều này. Hy vọng để có được nó sau này chiều nay. Nếu tôi tìm thấy bất cứ điều gì dứt khoát, tôi sẽ cập nhật ở đây. –

+0

Thử sử dụng ** - (void) viewDidLayoutSubviews { [super viewDidLayoutSubviews]; self.tableView.contentSize = CGSizeMake (self.tableView.frame.size.height, self.tableView.contentSize.height);} ** –

1

Tôi đã gặp sự cố này hôm nay và đã gửi báo cáo lỗi với Apple.

Xuất hiện nếu bạn đang sử dụng ô tùy chỉnh có phần tử giao diện người dùng VÀ autoLayout, kích thước nội dung UIScrollView đang gặp sự cố.

Nếu bạn xóa tất cả các thành phần giao diện người dùng, HOẶC tắt tự động hoàn thành, HOẶC sử dụng ô nhà máy (cơ bản, v.v.), tất cả đều hoạt động tốt.

-1

Cùng một vấn đề tôi đã sửa chữa trong dự án của mình. Tôi đoán đây là lỗi trong Bảng phân cảnh.

Sau đó, tôi đã giải quyết nó bằng cách mã hóa thủ công trong phương pháp willAutorotate bằng cách thiết lập

tableview.contentsize = CGSizeMake(tableview.width, tableview.contentsize.height); 

Hy vọng điều này sẽ làm việc cho bạn là tốt.

Nếu bạn tìm thấy bất kỳ tài liệu táo nào về cùng một tài khoản thì vui lòng cập nhật cho tôi. Đến khi đó bạn có thể sử dụng cùng một giải pháp.

+0

Liên kết nào? Bạn muốn nói gì? – Mrunal

0

Xuất hiện nếu bạn đang sử dụng ô tùy chỉnh có phần tử giao diện người dùng VÀ autoLayout, kích thước nội dung UIScrollView đang gặp sự cố.

Tôi phải tắt AutoLayout cho UITableViewCells tùy chỉnh của mình để có thể cuộn xuống dưới cùng để cập nhật dữ liệu và sau đó [self.tableView reloadData].

Khi tính năng AutoLayout được bật, tableView.contentSize đã được cập nhật, nhưng tôi vẫn không thể cuộn xuống dưới cùng trừ khi tôi xoay thiết bị.

1

Tôi có cùng sự cố ... Tôi tìm thấy liên kết this. Khi tôi cố gắng thực hiện điều này, tôi không tìm thấy thuộc tính Tự động định cỡ cho chế độ xem của mình, sau đó nhấp vào Master View Controller và sau đó nhấp vào File Inspector và bỏ chọn Use Autolayout và sau đó đi tới Attributes inspector tự động định lại kích thước sẽ ở đó thì bạn có thể thay đổi thuộc tính bạn muốn thế. tôi chắc chắn bạn phải có quản lý để con số này ra nhưng tôi hy vọng điều này sẽ giúp người khác ... :)

0

Tôi tìm thấy sau đây để làm việc cho tôi:

- (void)viewDidLayoutSubviews 
{ 
    [super viewDidLayoutSubviews]; 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     self.tableView.contentSize = CGSizeMake(self.tableView.frame.size.width, self.tableView.contentSize.height); 
    }); 
} 

Thông báo các async công văn: nếu dòng đó sẽ được thực hiện đồng bộ thì thay đổi contentSize sẽ kích hoạt một đường viền bố trí khác trước khi đường hiện tại hoàn thành. Điều này kích hoạt một ngoại lệ:

Bố cục tự động vẫn được yêu cầu sau khi gửi -viewDidLayoutXem trước bộ điều khiển xem .

0

Cách sử dụng Các ràng buộc đã giúp tôi. Vì bạn đang sử dụng Storyboards, nên dễ dàng đặt giá trị Constraint cho tất cả các cạnh, vì vậy UITableView sẽ luôn lấp đầy toàn bộ ViewController (tất nhiên nếu UITableView lấp đầy toàn bộ ViewController) bất kể định hướng thiết bị.

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