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

时间:2013-05-09 20:39:11

标签: ios ipad uipopovercontroller

所以我自己意识到这一点并找到了答案以确认:

Prevent contentSizeForViewInPopover from animating

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

我在弹出视图控制器类中动态设置文本视图的大小以适应文本视图显示的数据量,这仅适用于其帧大小已定义/已知/无论您想要的位置在视图生命周期中尚未达到这一点时说出来。

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

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

编辑这是我在视图控制器中的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);
}

1 个答案:

答案 0 :(得分:2)

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