UIActivityViewController 抛出错误

问题描述 投票:0回答:1

我遇到了 UIActivityViewController 的问题。当我尝试通过以下方式分享图像时:

let activityViewController = UIActivityViewController(activityItems: [UIImage()], applicationActivities: nil)

我收到错误:

    2023-10-11 09:45:33.759783+0200 Neview[16037:1721794] [LayoutConstraints] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. 
    Try this: 
        (1) look at each constraint and try to figure out which you don't expect; 
        (2) find the code that added the unwanted constraint or constraints and fix it. 
(
    "<NSLayoutConstraint:0x6000006c60d0 _UIActivityActionCellTitleLabel:0x15c5a3750.height >= 22   (active)>",
    "<NSLayoutConstraint:0x6000006c5b80 _UICollectionViewListCellContentView:0x15c5a1ec0.height >= _UIActivityActionCellTitleLabel:0x15c5a3750.height + 30   (active)>",
    "<NSLayoutConstraint:0x6000006c2850 'UIView-Encapsulated-Layout-Height' _UICollectionViewListCellContentView:0x15c5a1ec0.height == 30   (active)>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x6000006c60d0 _UIActivityActionCellTitleLabel:0x15c5a3750.height >= 22   (active)>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.

但是如果我将 UIActivityViewController 参数更改为 UIImage() 以外的其他参数,例如:

let activityViewController = UIActivityViewController(activityItems: [MyCustomUIView()], applicationActivities: nil)

它不再出现错误。

谁知道什么可能导致这个问题?

ios swift uiview uikit
1个回答
0
投票

您看到的错误消息与 UIKit 中的自动布局约束有关。它告诉您它无法满足您为视图设置的(或在 UIKit 内部设置的)所有约束。具体来说,它在与

_UIActivityActionCellTitleLabel
_UICollectionViewListCellContentView
的高度相关的约束方面遇到了麻烦。

这里有一些需要考虑和检查代码的事情:

关于错误消息

  1. 约束冲突:错误消息告诉您存在冲突的约束,并且它会破坏其中一个来解决问题。这并不理想,因为它可能会导致 UI 看起来不像您想要的那样。

  2. 调试约束:该消息建议在

    UIViewAlertForUnsatisfiableConstraints
    设置符号断点以在调试器中捕获此断点,这可能会帮助您了解添加有问题的约束的位置和原因。

您的问题的具体要点

  1. 空 UIImage:在第一个示例中,您使用空

    UIActivityViewController
    对象初始化
    UIImage
    。这可能会出现问题,因为共享 UI 可能会尝试生成预览或某种需要有效图像的界面元素。

    let activityViewController = UIActivityViewController(activityItems: [UIImage()], applicationActivities: nil)
    

    如果您尝试共享图像,请确保提供有效的

    UIImage
    对象。例如:

    let image = UIImage(named: "your_image_name")!
    let activityViewController = UIActivityViewController(activityItems: [image], applicationActivities: nil)
    
  2. 自定义 UIView:在第二个示例中,您传递了一个自定义 UIView,这可能不会导致

    UIActivityViewController
    出现相同的布局问题。

    let activityViewController = UIActivityViewController(activityItems: [MyCustomUIView()], applicationActivities: nil)
    

    请注意,当您像这样共享

    UIView
    时,共享的不是视图本身,而是它的快照(如果视图符合
    UIActivityItemSource
    )。确保您的自定义 UIView 已正确设置以进行共享。

© www.soinside.com 2019 - 2024. All rights reserved.