3

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

防止 contentSizeForViewInPopover 动画

基本上我在一条类似的船上,我想根据我必须显示的数据量来动态调整弹出框的大小。我也得到了这个动画动作,其中弹出视图移动到位。问题是,我无法在调用者/父项中设置弹出框的内容大小,因为在调用 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);
}
4

1 回答 1

2

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

于 2013-05-14T17:40:57.667 回答