简体   繁体   中英

AutoLayout - Unable to simultaneously satisfy constraints in swift5

my problem occurs when you press the button on the sidebar of the web view. The button sends a simple message to the web view and copies the clipboard. And Swift shows you the received message as a toast. It's very simple.

The function does not appear to be problematic,

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.

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. Button asks me to show him a toast message.

JSfunction

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

<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

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.

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.

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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