CordovaでiPhone向けのアプリを作成しております。
フロントはjQueryMobile 1.4.2を使用して、作成しております。
jQueryMobileのdata-role="popup"属性を付与して、モーダル表示した画面上にあるinput要素がある画面を作成している際に、iPhone11 Pro Maxでinput要素にカーソルを当ててキーボードが表示されたタイミングで以下のエラーが発生し、入力後モーダルを閉じるとアプリがクラッシュしてしまいます。
他のバージョンのiPhoneでは、同様のエラーログは出力されますが、クラッシュまではせず、またMac上のシミュレーターでも現象が再現しません。
根本的な解決方法をいろいろと調べてみておりますが、具体的に解決に至っておりません。
以下の現象と解決方法をご存じの方はいらっしゃいませんでしょうか?
コンソール上に出力されたエラーメッセージ
API error: <_UIKBCompatInputView: 0x103eaa600; frame = (0 0; 0 0); layer = <CALayer: 0x28057b380>> returned 0 width, assuming UIViewNoIntrinsicMetric API error: <_UIKBCompatInputView: 0x103eaa600; frame = (0 0; 0 0); layer = <CALayer: 0x28057b380>> returned 0 width, assuming UIViewNoIntrinsicMetric [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. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) ( "<NSAutoresizingMaskLayoutConstraint:0x28267c870 h=--& v=--& _UIToolbarContentView:0x103e45840.width == 0 (active)>", "<NSLayoutConstraint:0x2826b4690 H:|-(0)-[_UIButtonBarStackView:0x103e52760] (active, names: '|':_UIToolbarContentView:0x103e45840 )>", "<NSLayoutConstraint:0x2826b46e0 _UIButtonBarStackView:0x103e52760.trailing == _UIToolbarContentView:0x103e45840.trailing (active)>", "<NSLayoutConstraint:0x28267a170 'IB_Leading_Leading' H:|-(0)-[_UIModernBarButton:0x114e255f0] (active, names: '|':_UIButtonBarButton:0x114e250e0 )>", "<NSLayoutConstraint:0x28267ac10 'IB_Leading_Leading' H:|-(>=5)-[_UIModernBarButton:0x114e270a0] (active, names: '|':_UIButtonBarButton:0x114e26cc0 )>", "<NSLayoutConstraint:0x28267a1c0 'IB_Trailing_Trailing' H:[_UIModernBarButton:0x114e255f0]-(>=8)-| (active, names: '|':_UIButtonBarButton:0x114e250e0 )>", "<NSLayoutConstraint:0x28267ac60 'IB_Trailing_Trailing' H:[_UIModernBarButton:0x114e270a0]-(>=5)-| (active, names: '|':_UIButtonBarButton:0x114e26cc0 )>", "<NSLayoutConstraint:0x28267b890 'TB_Leading_Leading' H:|-(8)-[_UIModernBarButton:0x114e288b0'Done'] (active, names: '|':_UIButtonBarButton:0x114e27b40 )>", "<NSLayoutConstraint:0x28267b8e0 'TB_Trailing_Trailing' H:[_UIModernBarButton:0x114e288b0'Done']-(0)-| (active, names: '|':_UIButtonBarButton:0x114e27b40 )>", "<NSLayoutConstraint:0x28267bca0 'UISV-canvas-connection' UILayoutGuide:0x283cead80'UIViewLayoutMarginsGuide'.leading == _UIButtonBarButton:0x114e250e0.leading (active)>", "<NSLayoutConstraint:0x28267bf20 'UISV-canvas-connection' UILayoutGuide:0x283cead80'UIViewLayoutMarginsGuide'.trailing == _UIButtonBarButton:0x114e27b40.trailing (active)>", "<NSLayoutConstraint:0x28267bf70 'UISV-spacing' H:[_UIButtonBarButton:0x114e250e0]-(0)-[UIView:0x114e26470] (active)>", "<NSLayoutConstraint:0x2826b45f0 'UISV-spacing' H:[UIView:0x114e26470]-(0)-[_UIButtonBarButton:0x114e26cc0] (active)>", "<NSLayoutConstraint:0x28267c000 'UISV-spacing' H:[_UIButtonBarButton:0x114e26cc0]-(0)-[UIView:0x114e274f0] (active)>", "<NSLayoutConstraint:0x28267c050 'UISV-spacing' H:[UIView:0x114e274f0]-(0)-[_UIButtonBarButton:0x114e27b40] (active)>", "<NSLayoutConstraint:0x2826b4500 'UIView-leftMargin-guide-constraint' H:|-(0)-[UILayoutGuide:0x283cead80'UIViewLayoutMarginsGuide'](LTR) (active, names: '|':_UIButtonBarStackView:0x103e52760 )>", "<NSLayoutConstraint:0x2826b45a0 'UIView-rightMargin-guide-constraint' H:[UILayoutGuide:0x283cead80'UIViewLayoutMarginsGuide']-(0)-|(LTR) (active, names: '|':_UIButtonBarStackView:0x103e52760 )>" ) Will attempt to recover by breaking constraint <NSLayoutConstraint:0x28267a1c0 'IB_Trailing_Trailing' H:[_UIModernBarButton:0x114e255f0]-(>=8)-| (active, names: '|':_UIButtonBarButton:0x114e250e0 )> 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.
フロント画面のソース
HTML
1<div data-role="popup" data-position-to="window" data-overlay-theme="b" data-theme="a" id="dv_add_form" class="dv_form_box"> 2 <div data-role="header" class="ui-corner-top"> 3 <a id="add_form_close" class="ui-btn ui-corner-all ui-icon-delete ui-btn-icon-notext ui-btn-right"></a> 4 <h1>商品追加</h1> 5 </div> 6 <div data-role="content"> 7 <div class="dv_order_table_box"> 8 <table width="100%" border="0" cellspacing="0" border-collapse="collapse" text-align="center" class="tbl_table_design_01" style="table-layout: fixed;"> 9 <tr> 10 <th class="th_size_30">商品名</th> 11 <td> 12 <input type="text" name="model.itemInfo.itemname1" value="" id="txt_new_item_name" maxlength="40" oninput="maxLengthCheck(this)" data-length="40" placeholder="商品名入力" data-clear-btn="true"/> 13 <input type="hidden" name="model.itemInfo.itemname2" value="" id="ordering_model_item_info_item_name_2"/> 14 </td> 15 </tr> 16 <tr> 17 <th class="th_size_30">規格</th> 18 <td id="select_element"> 19 <select name="model.itemInfo.delivernumberunit" id="sel_gds_unit_value"> 20 <option value="0" id="option_default" selected="selected">未指定</option> 21 </select> 22 </td> 23 </tr> 24 <tr> 25 <th class="th_size_30">数量</th> 26 <td> 27 <input type="number" name="model.itemInfo.orderNumber" maxlength="11" oninput="maxLengthCheck(this)" id="num_order_number_new" min="0" placeholder="数量入力" data-clear-btn="true"/> 28 </td> 29 </tr> 30 </table> 31 <a id="submitAdd" data-role="button" data-ajax="false" >OK</a> 32 </div> 33 </div> 34</div>
JavaScript
1$("#submitAdd").on('click', function (e) { 2 e.preventDefault(); 3 4 var new_item_name = $.trim($("#txt_new_item_name").val()); 5 var new_item_unit = $("#sel_gds_unit_value").val(); 6 var new_item_number = $.trim($("#num_order_number_new").val()); 7 var new_item_unit_name = getCdName(list_cd_3, new_item_unit); 8 var k = ctmer_item_list.item_list.length; 9 10 if (!validatePopupAddNewItem()) { 11 return false; 12 } 13 14 var html_li_item = $( 15 '<li data-icon="delete" class="ui-li-has-alt ui-li-has-count">' 16 ); 17 var html_list_item = 18 '<a href="#dv_form" data-rel="popup" id="a_item_row_' + k + 19 '" class="a_item_row ui-btn" aria-haspopup="true" ' + 20 'aria-owns="dv_form" aria-expanded="false">' + 21 '<h2 class="h2_data_good_name" align="left" id="h2_item_name_' + 22 k + '">' + new_item_name + '</h2>' + '<span class="ui-li-count' + 23 ' ui-body-inherit" align="left" id="sp_order_number_' + k + '">' 24 + new_item_number + '</span>' + 25 '<p class="ui-li-aside" id="p_item_cd_' + k + '">' + 26 new_item_unit_name + '</p>' + '</a><a href="#dv_dialog" ' + 27 'data-rel="popup" data-role="button" data-inline="true" ' + 28 'id="a_cancel_row_' + k + '" class="a_order_cancel ui-btn ' + 29 'ui-btn-inline ui-shadow ui-corner-all ui-btn-icon-notext ' + 30 'ui-icon-delete" aria-haspopup="true" aria-owns="dv_dialog" ' + 31 'aria-expanded="false" role="button" title="取消"></a>'; 32 html_li_item.append(html_list_item).data({ 33 name: new_item_name, 34 unit: new_item_unit_name, 35 number: new_item_number 36 }); 37 $('#main ul.ul_order_list #li_good_title').after(html_li_item); 38 ctmer_item_list.item_list.push({ 39 item_number: new_item_number, 40 deliver_unit_name: new_item_unit_name, 41 deliver_unit: new_item_unit, 42 deliver_number_unit: new_item_unit, 43 item_name1: new_item_name, 44 free_item: 1 45 }); 46 $('#dv_add_form').popup('close'); 47 $('#dv_form').popup({ 48 afterclose: function (event, ui) { 49 $("#txt_new_item_name").val(''); 50 $("#sel_gds_unit_value").val(''); 51 $("#num_order_number_new").val(''); 52 $('#select_element').find('span').first().text('未指定'); 53 $('#sel_gds_unit_value').find('option').remove().end() 54 .append('<option value="0" id="option_default" selected="selected">未指定</option>').val('0'); 55 addHtmlCdNameList(list_cd_3, $('#sel_gds_unit_value')); 56 } 57 }); 58}); 59 60$('#add_form_close').on('click', function(e){ 61 e.preventDefault(); 62 $('#dv_add_form').popup('close'); 63});
使用している言語
HTML5 + CSS3
JavaScript + JQuery 1.10.2(JQuery Mobile 1.4.2) + Cordova 7.0.1
試したこと
・コンパイルを行っているMac端末のXCodeが最新ではなかったため、XCode自体のバージョンアップを実施。
・エラー内容を調査している際に、同様の現象が発生している方のサイトを見つけ、使用しているcordova-plugin-keybordのバージョンを最新バージョンにバージョンアップ。
・aタグのhref属性とonClickイベントが同居していたため、event.preventDefaultによりイベント処理を明示的に処理させないように改修を実施。
補足情報
使用しているXCodeのバージョンは、11.3.1です。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。