简体   繁体   English

AutoLayout - 无法同时满足 swift5 中的约束

[英]AutoLayout - Unable to simultaneously satisfy constraints in swift5

my problem occurs when you press the button on the sidebar of the web view.当您按下 web 视图侧边栏上的按钮时,会出现我的问题。 The button sends a simple message to the web view and copies the clipboard.该按钮向 web 视图发送一条简单消息并复制剪贴板。 And Swift shows you the received message as a toast. Swift 将收到的消息显示为敬酒。 It's very simple.这很简单。

The function does not appear to be problematic, function似乎没有问题,

but the UI is a problem.但用户界面是个问题。 When the button is pressed, the screen slides from top to bottom, showing the toast and pressing the button again activates the function of pressing the other button on the sidebar.按下按钮时,屏幕从上到下滑动,显示吐司,再次按下按钮会激活按下侧边栏上另一个按钮的 function。

The screen is the same, but the screen seems to be down.屏幕是一样的,但屏幕似乎是向下的。 The sidebar screen contains a scroll.侧边栏屏幕包含一个滚动条。 Is that what it is about?这就是它的意思吗?

Error log:错误日志:

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. 
    (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSAutoresizingMaskLayoutConstraint:0x283a866c0 h=-&- v=-&- _UIToolbarContentView:0x133ebf3b0.width == UIToolbar:0x133ebef70.width   (active)>",
    "<NSLayoutConstraint:0x283a8b390 H:|-(0)-[_UIButtonBarStackView:0x133ec0570]   (active, names: '|':_UIToolbarContentView:0x133ebf3b0 )>",
    "<NSLayoutConstraint:0x283a8b3e0 _UIButtonBarStackView:0x133ec0570.trailing == _UIToolbarContentView:0x133ebf3b0.trailing   (active)>",
    "<NSLayoutConstraint:0x283a84910 H:|-(16)-[_UIModernBarButton:0x133dcc420]   (active, names: '|':_UIButtonBarButton:0x133dcc1d0 )>",
    "<NSLayoutConstraint:0x283a84960 H:[_UIModernBarButton:0x133dcc420]-(>=8)-|   (active, names: '|':_UIButtonBarButton:0x133dcc1d0 )>",
    "<NSLayoutConstraint:0x283a84f50 H:|-(>=5)-[_UIModernBarButton:0x133ecbe60]   (active, names: '|':_UIButtonBarButton:0x133ecbc10 )>",
    "<NSLayoutConstraint:0x283a84fa0 H:[_UIModernBarButton:0x133ecbe60]-(>=5)-|   (active, names: '|':_UIButtonBarButton:0x133ecbc10 )>",
    "<NSLayoutConstraint:0x283a856d0 H:|-(8)-[_UIModernBarButton:0x133dcd540'Done']   (active, names: '|':_UIButtonBarButton:0x133ecc380 )>",
    "<NSLayoutConstraint:0x283a85720 H:[_UIModernBarButton:0x133dcd540'Done']-(16)-|   (active, names: '|':_UIButtonBarButton:0x133ecc380 )>",
    "<NSLayoutConstraint:0x283a85ae0 'UISV-canvas-connection' UILayoutGuide:0x2820c1c00'UIViewLayoutMarginsGuide'.leading == _UIButtonBarButton:0x133dcc1d0.leading   (active)>",
    "<NSLayoutConstraint:0x283a85cc0 'UISV-canvas-connection' UILayoutGuide:0x2820c1c00'UIViewLayoutMarginsGuide'.trailing == _UIButtonBarButton:0x133ecc380.trailing   (active)>",
    "<NSLayoutConstraint:0x283a85d10 'UISV-spacing' H:[_UIButtonBarButton:0x133dcc1d0]-(0)-[UIView:0x133e94d90]   (active)>",
    "<NSLayoutConstraint:0x283a85d60 'UISV-spacing' H:[UIView:0x133e94d90]-(0)-[_UIButtonBarButton:0x133ecbc10]   (active)>",
    "<NSLayoutConstraint:0x283a85db0 'UISV-spacing' H:[_UIButtonBarButton:0x133ecbc10]-(0)-[UIView:0x133ecc1a0]   (active)>",
    "<NSLayoutConstraint:0x283a85e00 'UISV-spacing' H:[UIView:0x133ecc1a0]-(0)-[_UIButtonBarButton:0x133ecc380]   (active)>",
    "<NSLayoutConstraint:0x283a835c0 'UIView-Encapsulated-Layout-Width' UIToolbar:0x133ebef70.width == 0   (active)>",
    "<NSLayoutConstraint:0x283a8b250 'UIView-leftMargin-guide-constraint' H:|-(0)-[UILayoutGuide:0x2820c1c00'UIViewLayoutMarginsGuide'](LTR)   (active, names: '|':_UIButtonBarStackView:0x133ec0570 )>",
    "<NSLayoutConstraint:0x283a8b2f0 'UIView-rightMargin-guide-constraint' H:[UILayoutGuide:0x2820c1c00'UIViewLayoutMarginsGuide']-(0)-|(LTR)   (active, names: '|':_UIButtonBarStackView:0x133ec0570 )>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x283a84960 H:[_UIModernBarButton:0x133dcc420]-(>=8)-|   (active, names: '|':_UIButtonBarButton:0x133dcc1d0 )>

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.

I really want to solve this problem.我真的很想解决这个问题。

Edit编辑


Found the cause of the problem.找到了问题的原因。 Pressing the button will bring up the keyboard and disappear again.按下按钮将弹出键盘并再次消失。 Why is this happening?为什么会这样?

The function of this button communicates with me.这个按钮的function和我通讯。 Button asks me to show him a toast message.巴顿让我给他看一条祝酒词。

JSfunction JS函数

function copy_address(){
      var t = document.createElement("textarea");
      document.body.appendChild(t);
      t.value = $("#text").val();
      t.select();
      document.execCommand('copy');
      document.body.removeChild(t);
      var postData = {
                tip: "testing",
                message: "sucess",
                timestamp: (new Date()).getTime().toString()
        };
        webkit.messageHandlers.send.postMessage(postData);
}

JSP Button View JSP 按钮视图

<div class="w" id="user"></div>
<div class="b-copy">
    <button type="button" class="btn" onclick="copy_address()">copy</button>
    <input type="text" id="copy_text" style="display: none;">
</div>

Swift Code in WebViewController WebViewController 中的 Swift 代码

import Toaster
...
    override func loadView() {
        super.loadView()
      ...
        mainWebView = WKWebView(frame: mainWebView.frame, configuration: config)

        mainWebView.uiDelegate = self
        mainWebView.navigationDelegate = self

        view.addSubview(mainWebView)
        view.addSubview(indicatorImage)
}
    @available(iOS 8.0, *)
    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        if message.name == "message" {
            let sendmessage = message.body as! NSDictionary
            guard sendmessage["val"] != nil else {
                return
            }
            let val : String = sendmessage["val"] as! String
            if sendmessage["val2"] != nil {
                getmessage = sendmessage["val2"] as? String
            }
          switch val {
            case "testing":
                Toast(text: getmessage).show()
                break
        ....
}
}

I discovered the problem of this through a simulator.我通过模拟器发现了这个问题。

When I checked with my actual iPhone, the screen looked like it was going down from top to bottom because I couldn't see the keyboard, but it was actually a short look and then it disappeared.当我用我的实际 iPhone 进行检查时,由于我看不到键盘,屏幕看起来像是从上到下往下掉的,但实际上只是看了一小会然后就消失了。

That's why there was a problem with the height of the toolbar.这就是工具栏高度有问题的原因。 And the cause of the problem with the keyboard was the JS function.键盘问题的原因是JS function。

t.select(); 
document.execCommand('copy');

Because of this part, the keyboard was visible and disappeared.由于这部分,键盘可见并消失了。 So I solved this problem through a search.所以我通过搜索解决了这个问题。

t.readOnly = true;

I've solved my problem by adding this code.我通过添加此代码解决了我的问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM