Tôi đã xóa StackOverflow (và Internet) để tìm giải pháp cho vấn đề này. Câu hỏi đã được hỏi nhiều lần, nhưng như bạn lưu ý, không bao giờ trả lời đầy đủ. Nhiều người solutions đưa ra một giải pháp có thể chấp nhận được nếu nó không quan trọng cho dù, ví dụ: một thanh công cụ thấp cũng cuộn tròn lên.
Others đã cung cấp giải pháp sử dụng UIView
hoạt ảnh/CoreAnimation thay vì UIModalTransitionStylePartialCurl
làm kiểu chuyển đổi phương thức; điều này là tồi tệ nhất một giải pháp không được phép trong App Store, và tốt nhất là không hoàn toàn có hiệu lực tương tự như một được từ UIModalTransitionStylePartialCurl
(ví dụ như hình dạng của curl là khác nhau).
Không có giải pháp nào trong số này cung cấp câu trả lời bắt chước giải pháp của Apple trong ứng dụng Bản đồ (tức là sử dụng UIModalTransitionStylePartialCurl
nhưng để lại UIToolbar
chưa được cuộn tròn ở cuối màn hình).
Tôi sẽ tiếp tục trong truyền thống câu trả lời chưa hoàn chỉnh này, vì bạn hỏi về UITabBarController
và giải pháp của tôi không giải quyết cụ thể trường hợp đó. Nó, tuy nhiên, giải quyết vấn đề tôi đã có, đó là để có được một trang curl một nửa với một thanh công cụ không cong ở phía dưới.
Phải có cách thanh lịch hơn để thực hiện việc này, nhưng đây là cách tôi quản lý.
rootViewController
của AppDelegate
là lớp con của UIViewController
, mà tôi sẽ gọi TAContainerViewController
. TAContainerViewController
quản lý a) nội dung thực tế của màn hình ("nội dung được cuộn tròn"), TAContentViewController
và b) nội dung "đằng sau" TAContentViewController
(ví dụ: cài đặt), mà tôi sẽ gọi TAUnderCurlViewController
.
Ví dụ của tôi là TAContainerViewController
có các thuộc tính cho TAContentViewController
và TAUnderCurlViewController
. UIView
nội dung của tôi là một phần phụ của thuộc tính TAContentViewController
's view
; tương tự như vậy những gì người dùng nhìn thấy dưới curl là tài sản view
của TAUnderCurlViewController
.
Trong phương pháp init
của TAContainerViewController
tôi chắc chắn rằng phải làm như sau:
_underCurlVC.modalTransitionStyle = UIModalTransitionStylePartialCurl;
Và để cuộn nội dung để lộ dưới trang, tôi thiết lập một hành động mà các cuộc gọi mã này:
[self.contentVC presentModalViewController:self.underCurlVC animated:YES];`
nơi self
là TAContainerViewController
, contentVC
là bản sao của TAContentViewController
và underCurlVC
là phiên bản TAUnderCurlViewController
.
Để loại bỏ chế độ xem, chỉ cần [self.contentVC dismissModalViewControllerAnimated:YES];
.
Một số điểm kỳ lạ dường như xảy ra với khung contentVC
khi chế độ xem phương thức bị loại bỏ, vì vậy tôi đã đặt lại khung theo cách thủ công khi chế độ xem phương thức bị loại bỏ.
Tôi đã đăng dự án mẫu có thêm chi tiết về số Github. Hy vọng rằng ai đó có thể thực hiện việc này và biến nó thành một giải pháp nhẹ nhàng hơn, hoặc mở rộng nó để làm việc với một số UINavigationController
hoặc UITabBarController
. Tôi nghĩ rằng mẹo này là kéo View Controller ra khỏi các mối quan hệ được xác định rõ ràng trong các lớp con Cocoa, vì vậy có thể phân lớp những bộ điều khiển View đặc biệt đó sẽ làm điều đó.
FYI phương pháp init trên chỉ là một phương pháp thuận tiện tĩnh mà không được phân bổ, vv – danhopwood