iOS 弹窗(modal present)中对iPad 和 iPhone的适配

问题背景: 在写iPhone应用的过程中, 我们或多或少会使用到拟态弹窗(非FullScreen, FullScreen不在本次讨论之列).(modal present). 用于展示做(临时页面)的跳转. 

    你可能使用如下代码: 

      在A(源VC) present B(临时VC)即可. 不用做过多规定和设置. 

privacyVC作为临时弹窗

    结果效果如下: (没什么问题哈?)

iPhone上拟态弹窗显示.

但是. 如果还是只使用这一段代码, 在iPad上使用. 效果就会有所不同. 因为同一段代码, 在iPad不是以屏幕的宽度和高度来显示B页面的. 而是以弹窗. 这个时候, B页面中的元素位置如果以B页面的view.frame去做计算. 就会出现偏移. 如下图所示:

页面元素还是使用self.view.frame去定位. 就已经出现偏差

解决问题:  所以. 这次需要解决的问题就是, 如何准确的获得弹窗所在的VC的view的宽度(显示宽度).  使得在iPhone上和iPad都能准确的显示内容和定位. 

解决办法:  将获取self.view.frame的代码放到viewDidAppear(_ animated: Bool) 里. 而不是在viewDidLoad()或者其他的方法里. 

你会发现, 你在viewDidAppear中获取到的view的frame是实际弹窗的大小. 而不是整个屏幕的大小. 而在其他的方法里, 获取view的frame. 则获得的是整个屏幕的大小. 这也是导致问题的原因. 

将width和height的值改到viewDidAppear里后.

更改完成以后. 再看效果: ( iPhone和iPad都完美解决)

更改后的拟态弹窗内容.

你可能感兴趣的:(iOS 弹窗(modal present)中对iPad 和 iPhone的适配)