问题背景: 在写iPhone应用的过程中, 我们或多或少会使用到拟态弹窗(非FullScreen, FullScreen不在本次讨论之列).(modal present). 用于展示做(临时页面)的跳转.?
? ? 你可能使用如下代码:?
? ? ? 在A(源VC) present B(临时VC)即可. 不用做过多规定和设置.?
? ? 结果效果如下: (没什么问题哈?)
但是. 如果还是只使用这一段代码, 在iPad上使用. 效果就会有所不同. 因为同一段代码, 在iPad不是以屏幕的宽度和高度来显示B页面的. 而是以弹窗. 这个时候, B页面中的元素位置如果以B页面的view.frame去做计算. 就会出现偏移. 如下图所示:
解决问题:? 所以. 这次需要解决的问题就是, 如何准确的获得弹窗所在的VC的view的宽度(显示宽度).? 使得在iPhone上和iPad都能准确的显示内容和定位.?
解决办法:??将获取self.view.frame的代码放到viewDidAppear(_ animated: Bool) 里. 而不是在viewDidLoad()或者其他的方法里.?
你会发现, 你在viewDidAppear中获取到的view的frame是实际弹窗的大小. 而不是整个屏幕的大小. 而在其他的方法里, 获取view的frame. 则获得的是整个屏幕的大小. 这也是导致问题的原因.?
更改完成以后. 再看效果: ( iPhone和iPad都完美解决)