7

我使用 UIPopoverController 弹出一个窗口。我使用 preferredContentSize 来设置大小。然后,我使用 Push 一个更大尺寸的新视图控制器。当子视图弹出时,我喜欢将窗口恢复到原始大小。但是好像不行。

我已经把 self.preferredContentSize = myWindowSize; 但似乎无法恢复。

在 iOS6 或之前,我将 contentSizeForViewInPopover 设置为 CGSizeZero,然后设置适当的大小。但在 iOS7 上,它会使弹出窗口消失。

4

3 回答 3

5

这为我解决了它:

override func viewDidAppear(animated: Bool)
{
    navigationController?.preferredContentSize = preferredContentSize
    super.viewDidAppear(animated)
}
于 2015-09-08T19:32:43.670 回答
0

我能想到的唯一解决方案是关闭您的弹出窗口并自动以您想要的新大小再次显示它。对于内容大小不会缩小高度的 iOS 8,我也遇到了麻烦。宽度缩小了,但高度对我来说只能增加。

看一下

https://developer.apple.com/library/ios/documentation/uikit/reference/UIPopoverControllerDelegate_protocol/Reference/Reference.html#//apple_ref/occ/intfm/UIPopoverControllerDelegate/popoverController:willRepositionPopoverToRect:inView

它可能会帮助您使用委托协议重新定位矩形

解决方案:

好的,这是我的解决方案。从呈现弹出框控制器的视图控制器中,您可以设置一个名为“resetContentSize:(CGSize)size”之类的委托。例如在您呈现视图控制器的头文件中:

@protocol PopoverDelegate <NSObject>
- (void)resetContentSize:(CGSize)size
@end

在您展示弹出框控制器的实现文件中,您可以设置委托

self.popoverController.delegate = self;

从您的弹出框控制器中,您可以在头文件中添加 PopoverDelegate

@property (nonatomic, weak) id<PopoverDelegate> popoverDelegate;

并在您的实现文件中调用委托方法:

[popoverDelegate resetContentSize:CGSizeMake(320.0f,205.0f)];
于 2014-09-10T16:25:35.477 回答
0

有同样的问题。我的解决方案是在 navigationController 上设置 preferredContentSize,而不是self.

override func viewWillAppear(_ animated: Bool) {
    self.navigationController?.preferredContentSize = myControllerSize
}
于 2019-11-07T10:39:22.743 回答