Tocropviewcontroller: safeAreaInsets 不正确吗?

创建于 2019-09-25  ·  14评论  ·  资料来源: TimOliver/TOCropViewController

感谢您的精彩图书馆! 👍

你到底想用这个库实现什么?
我只有一个问题。 工具栏位置离底部太近:

safeAreaInsets.bottom 不正确吗?

需要一个可重现的示例项目? 测试安全区.zip

bug rfc

最有用的评论

嗨@zhangao0086! 抱歉耽搁了!

我终于有一些空闲时间来检查发生了什么。 这很奇怪,因为即使在父容器级别,除了缺口之外, safeAreaInsets都是 0。

我想我修复了它。 这是新的 iOS 13 模态显示的另一个副作用。 事实证明,如果您不将modalPresentationStyle.fullScreen ,视图控制器似乎不遵守插图。

我还没有发布新的 pod 版本(当我将它更新到 Catalina 时,我的 CI 服务器崩溃了。😅),但是我在 master 分支中添加了.fullScreen标志。 您能否尝试从 master 拉取并查看它现在是否适合您?

通过 CocoaPods 从 master 拉取的语法是:

pod 'CropViewController', :git => 'https://github.com/TimOliver/TOCropViewController.git'

谢谢!

所有14条评论

@zhangao0086在 iOS13 上也有同样的问题,当你点击取消应用程序崩溃时.. 有任何更新吗?

平...

你好呀!
原因在于 CropViewController 的自定义 VC 转换。 为了解决这个问题,我们必须对 iOS13 中与转换相关的差异进行一些研究,或者……只是禁用它:)
文件:CropViewController.swift,字符串:561。

fileprivate func setUpCropController() {
        addChild(toCropViewController)
        transitioningDelegate = (toCropViewController as! UIViewControllerTransitioningDelegate)
        toCropViewController.delegate = self
        toCropViewController.didMove(toParent: self)
    }

要使用默认过渡,我们可以注释/删除这一行:

transitioningDelegate = (toCropViewController as! UIViewControllerTransitioningDelegate)

我认为这个问题不仅仅是自定义转换的问题。 我通过从弹出窗口中的 UIImagePickerController 推送控制器来呈现控制器。 iOS 13 中的弹出框包含视图中的箭头,因此该控制器现在认为它比实际大,并为箭头占用了额外的空间。 因此,如果箭头在右侧,则该控制器的内容会从右侧的屏幕上泄漏,等等。需要使用安全区域修改某些内容,但我不确定如何解决此问题 - 特别是因为它都是以编程方式完成的并且涉及多种观点。

我相信需要以某种方式使用 safeAreaLayoutGuide 来解决这个问题。 我刚刚浏览了代码,看起来它没有包含在任何地方。 希望我能得到更多帮助。 以下是人们遇到此问题的更多地方,其中还包括一些可能解决此问题的方法:

https://stackoverflow.com/questions/57988889/ios-13-uipopoverpresentationcontroller-sourceview-content-visible-in-the-arrow

https://stackoverflow.com/questions/57866771/ios-problem-of-display-the-popover-border-in-the-ios13

此外,如果这已在当前代码中修复,我可能在使用 Carthage 时看不到它,尽管我刚刚检查过并且没有更新

这事有进一步更新吗? @蒂姆奥利弗

嗨@zhangao0086。 非常感谢提供全面的示例应用程序!

我现在正忙于在我的其他一些项目中扑灭 iOS 13 火灾,所以我还没有机会看到这个。 对不起!

有空我会研究一下。 同时,如果有人找到修复程序并可以提交 PR,那将不胜感激!

我最初将CropViewController作为一个单独的视图控制器,因为当时不可能将TOCropViewController的所有 Objective-C 接口都转换为 Swift。 但我认为互操作性已经提高到我们现在可以抛弃包装器的程度。 希望这将防止将来出现此类问题。

@TimOliver感谢您的回复! 我完全理解你😃

嗨@zhangao0086! 抱歉耽搁了!

我终于有一些空闲时间来检查发生了什么。 这很奇怪,因为即使在父容器级别,除了缺口之外, safeAreaInsets都是 0。

我想我修复了它。 这是新的 iOS 13 模态显示的另一个副作用。 事实证明,如果您不将modalPresentationStyle.fullScreen ,视图控制器似乎不遵守插图。

我还没有发布新的 pod 版本(当我将它更新到 Catalina 时,我的 CI 服务器崩溃了。😅),但是我在 master 分支中添加了.fullScreen标志。 您能否尝试从 master 拉取并查看它现在是否适合您?

通过 CocoaPods 从 master 拉取的语法是:

pod 'CropViewController', :git => 'https://github.com/TimOliver/TOCropViewController.git'

谢谢!

@TimOliver 非常感谢您的出色工作!

精彩的! 它完全按照我的预期工作! 👍

我还必须在我的代码中设置cropViewController.modalPresentationStyle = .fullScreen (不仅仅是更新到主分支)。 在此处添加注释,因为我不清楚

此修复程序似乎仅适用于 Swift 代码。 有谁知道为什么它在目标 C 中不起作用?

此页面是否有帮助?
0 / 5 - 0 等级