preferredContentSize不会缩小

Jon*_*Lee 7 xcode ios7

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

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

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

小智 5

这为我解决了:

override func viewDidAppear(animated: Bool)
{
    navigationController?.preferredContentSize = preferredContentSize
    super.viewDidAppear(animated)
}
Run Code Online (Sandbox Code Playgroud)


kev*_*inl 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
Run Code Online (Sandbox Code Playgroud)

在呈现弹出窗口控制器的实现文件中,您可以设置委托

self.popoverController.delegate = self;
Run Code Online (Sandbox Code Playgroud)

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

@property (nonatomic, weak) id<PopoverDelegate> popoverDelegate;
Run Code Online (Sandbox Code Playgroud)

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

[popoverDelegate resetContentSize:CGSizeMake(320.0f,205.0f)];
Run Code Online (Sandbox Code Playgroud)