如果“查看为:”不同,XCode Modal VC 将被切断

Posted

技术标签:

【中文标题】如果“查看为:”不同,XCode Modal VC 将被切断【英文标题】:XCode Modal VC is cut off if "view as:" differs 【发布时间】:2018-07-20 15:22:14 【问题描述】:

我不知道这是一个错误还是什么,我确实使用了自动布局,除了模态视图控制器之外一切正常。


如果“查看为:”选项与模拟器的大小相同,则它们没有任何问题。但是当它们不同时,屏幕会切断一些内容。

因此,如果我确实选中“查看为 iPhone 8”并在模拟的 iPhone 8 上运行它就可以了。

但如果我在模拟 SE 上执行此操作,它会截断一些内容:

但前提是它是一个模态视图控制器

View as iPhone 8, Simulator as iPhone SE

View as iPhone SE, Simulator as iPhone SE

为什么会这样?

【问题讨论】:

【参考方案1】:

这里唯一的错误是施加圆角的遮罩(或其他任何遮罩)的尺寸错误。

您的四舍五入代码可能在错误的位置 — 可能在 viewDidLoad。这是一个错误,因为在调用 viewDidLoad 时,您的视图尚未达到其最终大小。

您的第一个屏幕截图就是一个完美的例子。模态视图以 iPhone 8 的宽度加载,并且假设这是它的大小,您会进行圆角舍入。但随后视图被缩小到 iPhone SE 的宽度,因此舍入计算最终不适合视图的实际大小。

解决方案很简单:将圆角代码移动到viewDidLayoutSubviews。不过要小心:viewDidLayoutSubviews 运行了很多次,所以使用 Bool 标志来确保你只绕过角落一次,第一次调用它。

【讨论】:

以上是关于如果“查看为:”不同,XCode Modal VC 将被切断的主要内容,如果未能解决你的问题,请参考以下文章

从 Modal/Popover 展开 Segue 导致开始/结束外观转换的调用不平衡

Xcode - 查看屏幕大小

关闭模态视图控制器

Xcode 11.1 查看控制器在当前 VC 下可见时以模态方式呈现

呈现小Modal VIewController Objective C

如何通过以编程方式将根(选项卡 ViewController)从子选项卡设置为未实例化的不同 VC