2015-09-22 26 views
7

Tôi đang sử dụng UIPopoverPresentationController cho các cửa sổ bật lên trong ứng dụng iOS. Khi bộ điều hướng trong cửa sổ bật lên đẩy bộ điều khiển chế độ xem mới, cửa sổ bật lên sẽ đổi kích thước thành bộ điều khiển của chế độ xem preferredContentSize. Nhưng khi trình điều khiển điều hướng bật trình điều khiển chế độ xem khỏi ngăn xếp, cửa sổ bật lên không thay đổi kích thước về kích thước trước đó. Làm thế nào tôi có thể làm cho nó làm điều đó?Làm cách nào để thay đổi kích thước UIPopoverPresentationController trên thanh điều hướng?

Bản sao có thể có của this question, nhưng đối với UIPopoverPresentationController hiện đại.

Cập nhật: Xem here ví dụ mã minh họa sự cố. Sao chép nó và chạy nó trong một giả lập iPad. Chạm vào nút Popover và bạn có một popover với một bộ điều khiển nav. Chạm vào mục nút Push bar và bạn nhận được một VC cao hơn trên stack (kích thước nằm trong thanh điều hướng). Pop và nó không thay đổi kích thước xuống đến những gì nó được.

Trả lời

15

Thêm dòng này:

self.navigationController.preferredContentSize = self.preferredContentSize; 

phương pháp viewWillAppear: của bạn, vì vậy mà nó bây giờ sẽ trông như thế này:

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    if (self.navigationController) 
    { 
     UIBarButtonItem *item = [[UIBarButtonItem alloc]initWithTitle:@"Push" style:UIBarButtonItemStylePlain target:self action:@selector(onPush)]; 
     self.navigationItem.rightBarButtonItem = item; 
     self.navigationItem.title = NSStringFromCGSize(self.preferredContentSize); 
     self.view.backgroundColor = [UIColor lightGrayColor]; 

     self.navigationController.preferredContentSize = self.preferredContentSize; 
    } 
} 

Nó sẽ đảm bảo rằng kích thước ưa thích bộ điều khiển chuyển hướng được cập nhật mỗi lần bộ điều khiển chế độ xem hiển thị thay đổi. Tôi đã thử nghiệm nó trên mã mẫu của bạn và nó giải quyết vấn đề.

+0

Tốt. Tôi thực sự có một lớp con của 'UINavigationController' mà tôi sử dụng để giải quyết [vấn đề này] (http://stackoverflow.com/questions/32697436/how-can-i-change-the-opacity-of-the-overlay-behind -uipopoverpresentationcontroll /), vì vậy tôi overrode tất cả các biến thể của push và pop và áp dụng nguyên tắc này có thay vì trong tất cả các VC tôi có thể có trong bộ điều khiển nav trong popovers. –

+0

Bạn là một bậc thầy. – Claudio

3

Chỉ cần thêm trong ViewController mã tiếp theo của bạn

- (void) viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 

    self.navigationController.preferredContentSize = CGSizeMake(200, self.parentViewController.childViewControllers.lastObject.preferredContentSize.height-100); 
} 

Đây là video. Hy vọng đây là hành vi mà bạn mong đợi để có được.

+0

Điều này có vẻ đầy hứa hẹn. Nhưng bạn có thể làm cho nó chung chung, vì vậy bạn không giả định thay đổi kích thước +/- 100 điểm? –

+0

@ Mr.Jefferson Bạn có ý nghĩa gì? :) Bạn đã viết 'Pop và nó không thay đổi kích thước xuống đến những gì nó đã được.' Và bây giờ bạn có thể thay đổi kích thước nó trở lại kích thước ban đầu. Và tôi đã nghĩ rằng đây chỉ là một ví dụ từ bạn để minh họa cho vấn đề. Và 'làm cho nó chung' là không rõ ràng nhiệm vụ :) Bạn có thể cung cấp một số công thức hoặc mô tả như thế nào pop-over nên phản ứng? Bởi vì vấn đề không phải là chung ... :) –

+0

Câu trả lời của bạn giả định rằng VC bạn đang popping đến là có được 200 điểm rộng và 100 điểm ngắn hơn so với một trong những bạn đang popping từ. Bạn có thể viết lại câu trả lời của bạn để không cho rằng? –

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