动态调整popover大小时阻止动画

所以我自己意识到这一点并找到了这个答案来证实:

从动画中阻止contentSizeForViewInPopover

基本上我在一个类似的船,我想动态调整我的弹出窗口,取决于我必须显示多少数据。 我也在弹出视图移动到位的情况下进行此动画操作。 问题是,我无法在调用者/父级中设置popover的内容大小,因为在调用viewDidAppear或viewDidLayoutSubviews之前,文本视图的内容视图的大小和弹出框中的文本视图的框架都是已知的,但是当然在这一点上已经太晚了,弹出窗口已经开始可见了,因此我得到了这个不受欢迎的动画。

我在弹出窗口控制器类中动态设置文本视图的大小以适应文本视图显示的数据量,这仅适用于其帧大小已定义/已知/但是您想要将其写入的点当它还没有到达视图生命周期中的那一点时。

我应该提一下,我有我的视图控制器,并在故事板中查看所有内容。

这有意义吗? 希望我能解释清楚。 任何帮助或建议非常感谢。

编辑这是我在视图控制器中的viewDidLayoutSubviews方法我在弹出框中加载 – 希望这说明了。 第一次加载,如果我不在viewDidLayoutSubviews或viewDidAppear中执行此操作,我的2个文本视图的框架是CGRectZero,文本视图不会正确调整内容大小,并且弹出框大小也不正确:

- (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; self.physicianDataNewValueTextView.text = self.physicianDataNewValue; CGRect frame = self.physicianDataNewValueTextView.frame; frame.size.height = self.physicianDataNewValueTextView.contentSize.height; self.physicianDataNewValueTextView.frame = frame; self.physicianDataOldValueTextView.text = self.physicianDataOldValue; frame = self.physicianDataOldValueTextView.frame; frame.size.height = self.physicianDataOldValueTextView.contentSize.height; self.physicianDataOldValueTextView.frame = frame; self.contentSizeForViewInPopover = CGSizeMake(384.0f, self.physicianDataOldValueTextView.frame.size.height + 75.0f); } 

所以我决定使用委托。 我没有在视图控制器中为弹出窗口重置内容大小,而是使用新大小调用我的委托(包含视图控制器),因此我可以将动画属性设置为NO来设置它。 效果很好。