尝试更改 iOS 中私有视图的布局边距的客户端错误

Posted

技术标签:

【中文标题】尝试更改 iOS 中私有视图的布局边距的客户端错误【英文标题】:Client error attempting to change layout margins of a private view in iOS 【发布时间】:2019-09-26 08:15:06 【问题描述】:

您好,我有一个在 Xcode 10.4 中运行的应用程序,应用程序运行良好,没有错误,没有问题。我已将我的 xcode 升级到版本 11.0 现在,当我尝试运行该应用程序时,它 imigatley 崩溃并显示以下错误消息:

由于未捕获的异常而终止应用程序 'NSInternalInconsistencyException',原因:'客户端错误尝试 更改私有视图的布局边距'

我也通过断点进行调试,但我还没有弄清楚为什么它会显示这个错误。我检查了导航控制器也一切都很好。它也在控制台中向我显示这条消息

-[_UINavigationBarContentView 中的断言失败 setLayoutMargins:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKitCore_Sim/UIKit-3899.13.13/_UINavigationBarContentView.m:703

任何人都可以帮助我如何摆脱这次崩溃以及这次崩溃的目的是什么?

【问题讨论】:

请阅读此thread。 是的,我已经浏览了文档,我想知道我的应用程序中我以编程方式设置约束的任何地方都必须应用此条件? @卡姆兰 不是到处都是,只是在设置layoutMargins时。 实际上我的大部分课程都使用 Material lib,因此很难在每个课程中设置,它存在 lib 可营性问题,我已将我的 Xcode 版本降级到 10.3,现在它运行良好。 @卡姆兰 【参考方案1】:

我从我的代码中删除了它:

 view.layoutMargins = UIEdgeInsetsZero;

它帮助了我

查看更多https://github.com/CosmicMind/Material/issues/1250

【讨论】:

好的,但不幸的是由于没有时间我降级了我的 Xcode,现在工作正常。 @Vasily G 您从哪个文件中删除了此代码? .@Vasily G【参考方案2】:

将此添加到您的代码中:

         if #available(ios 13.0, *)            
                let margins = subview.layoutMargins
                subview.frame = CGRect(x: -margins.left, y: -margins.top, width: margins.left + margins.right + subview.frame.size.width, height: margins.top + margins.bottom + subview.frame.size.height)
                else 
                subview.layoutMargins = UIEdgeInsets.zero
            

【讨论】:

你能解释一下你的答案吗?仅代码答案对于帮助偶然发现该问题的其他人了解其工作原理并不是很有用。 这个 subView 是从哪里来的? @A.Guz

以上是关于尝试更改 iOS 中私有视图的布局边距的客户端错误的主要内容,如果未能解决你的问题,请参考以下文章

对边距的影响?

在没有边距的视图中均匀分布

Xcode 8 添加布局边距崩溃

以编程方式创建绑定到视图控制器边距的约束

Bootstrap:没有外部边距的流畅布局

限制为边距的堆栈视图不会留下任何余量