所以我自己意识到了这一点,并找到了这个答案来确认:
Prevent contentSizeForViewInPopover from animating
基本上我处于类似的情况,我想动态调整弹出窗口的大小,具体取决于我需要显示的数据量。我还得到了弹出 View 移动到位的动画 Action 。问题是,我无法在调用者/父级中设置弹出窗口的内容大小,因为在调用 viewDidAppear 或 viewDidLayoutSubviews 之前, TextView 的内容 View 的大小和弹出窗口中 TextView 的框架都是未知的,但当然此时已经太晚了,弹出窗口已经开始可见,因此我得到了这个不需要的动画。
我在弹出 View Controller 类中动态设置 TextView 的大小,以适应 TextView 显示的数据量,并且这只在定义/已知/但您想要的框架大小的情况下有效当 View 生命周期中还没有到达那个点时就说出来。
我应该提到我有我的 View Controller 并在 Storyboard中查看所有完成的内容。
这有道理吗?希望我能很好地解释它。非常感谢任何帮助或建议。
编辑这是我在弹出窗口中加载的 View Controller 中的 viewDidLayoutSubviews 方法 - 希望这能让它变得清晰。第一次加载时,如果我不在 viewDidLayoutSubviews 或 viewDidAppear 中执行此操作,我的 2 个 TextView 的框架是 CGRectZero, TextView 不会正确调整内容大小,并且弹出窗口大小也不正确:
- (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);
}
最佳答案
所以我决定使用委托(delegate)。我没有重置弹出窗口的 View Controller 中的内容大小,而是使用新的大小调用我的委托(delegate)(即包含 View Controller ),以便我可以将其动画属性设置为“否”。效果很好。
关于ios - 动态调整弹出窗口大小时防止动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16470699/