2012-03-15 23 views
5

Tôi có UIPopoverController với navigationController và một loạt các bản xem trước. Kích thước của cửa sổ bật lên được đặt ngay trước khi được hiển thị như sau:Thay đổi contentSizeForViewInPopover trên navigationController đẩy trên iOS

[self.myPopover setPopoverContentSize:CGSizeMake(320, 500)]; 

Điều đó có hiệu quả. Cửa sổ bật lên được hiển thị với kích thước được điều chỉnh. Khi nhìn khác được đẩy về hướng ngăn xếp kích thước của một popover được thiết lập một lần nữa - cần chiều cao khác nhau - trong phương pháp viewWillAppear:

self.contentSizeForViewInPopover = CGSizeMake(320, 700); 

này cũng hoạt động tốt. Khi tôi quay lại chế độ xem trước, kích thước không thay đổi.

Tôi đã thêm cùng một cuộc gọi trong chế độ xemWillAppear ở chế độ xem đầu tiên nhưng chế độ xem không đổi kích thước.

Tôi làm cách nào để quản lý thay đổi kích thước cửa sổ bật lên khi điều hướng giữa các chế độ xem?

Trả lời

3

tôi sử dụng hack này:

- (CGSize)contentSizeForViewInPopover 
{ 
    return CGSizeMake(320, 200); 
} 

- (void) forcePopoverSize 
{ 
    CGSize currentSetSizeForPopover = self.contentSizeForViewInPopover; 
    CGSize fakeMomentarySize = CGSizeMake(currentSetSizeForPopover.width - 1.0f, 
              currentSetSizeForPopover.height - 1.0f); 
    self.contentSizeForViewInPopover = fakeMomentarySize; 
} 


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

    [self forcePopoverSize]; 
} 

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

    CGSize currentSetSizeForPopover = self.contentSizeForViewInPopover; 
    self.contentSizeForViewInPopover = currentSetSizeForPopover; 
} 
+1

http://stackoverflow.com/questions/2752394/popover-with-embedded-navigation-controller-không-tôn trọng-kích thước-on-back-nav – Injectios

+0

Thật không may nó không hoạt động. –

+1

Đây là một công trình: http://stackoverflow.com/a/2946864/384864 –

3

Đây là một khó khăn. Tôi đã thử nhiều thứ và cuối cùng đã làm việc này. Nó chỉ có thể làm việc cho bạn, quá.

Trong số contentViewController tôi giữ một tham chiếu đến UIPopoverController * cha mẹ;

Tham chiếu này được đặt trong khi khởi tạo UIPopoverController và nội dung của nó. Điều này tất nhiên có thể không phù hợp trực tiếp với hệ thống phân cấp chế độ xem của bạn. Mã trong UIViewController cho thấy UIPopowerController là một cái gì đó như:

if (self.popoverController == nil) { 
    _contentController = [[ContentViewController alloc] initWithNibName:@"ContentViewController" 
                   bundle:[NSBundle mainBundle]]; 

    UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:_contentController]; 
    _contentController.parent = popover; 
    [popover setPopoverContentSize: CGSizeMake(520.0,580.0)]; 

    popover.delegate = self; 

    self.popoverController = popover; 
} 

Và khi tôi muốn tự động thay đổi kích thước nội dung từ bên trong contentViewController tôi sử dụng:

-(void)setNewSize:(CGSize) newSize { 

    [_parent setPopoverContentSize:newSize animated:YES]; 
} 
+0

Đó không phải là một thực hành tốt mang theo tham chiếu. Ý tưởng hay ... –

+1

@BorutTomazin: tôi biết - nó thực sự xấu xí :) nhưng sau 8 giờ làm việc tôi cuối cùng đã tìm thấy một điều mà làm việc. Có lẽ tôi sẽ cố gắng tìm giải pháp thanh lịch hơn cho điều này một lần ... có lẽ. Tôi sẽ thử liên kết bạn đã đăng ở trên. –

+1

Vâng tôi biết. Đôi khi là xấu xí và làm việc tốt hơn là tốt đẹp và không làm việc. :) Hãy cho tôi biết nếu bạn tìm thấy giải pháp tốt hơn. Cảm ơn! –