2017-09-23 111 views
5

當使用HTML選擇元素時,UIWebView在iPad上顯示原生UIPopoverController作爲下拉列表(iPhone使用UIPickerView,它工作正常)。iOS 11在iPad上完全破碎的UIWebView下拉菜單 - UIPopoverController

在iOS11這似乎完全斷裂:

  • 點擊外下拉而不選擇在酥料餅的一個選項的結果以關閉被關閉並立即重新呈現,偶爾空
  • 當多於一個下拉在頁面上,下拉新的列表包含從以前的列表中的元素
  • 當選擇第二個下拉,第一個重新打開
  • 系統有時下拉出現在左上角(大概失去了它的源代碼視圖)
  • 上面的步驟非常偶然導致以下崩潰:

2017年9月23日09:43:13.190728 + 0100的Web [1779:86622]由於未捕獲的異常「NSInternalInconsistencyException *終止應用程序 ',原因: 'UITableView dataSource未設置' *第一次拋出調用堆棧:(0 CoreFoundation 0x000000010d4a01cb exceptionPreprocess + 171 1 libobjc.A。dylib
0x000000010c8bbf41 objc_exception_throw + 48 2的CoreFoundation
0x000000010d4a5362 + [NSException提高:格式:參數:] + 98 3
基金會0x000000010c360089 - [NSAssertionHandler handleFailureInMethod:對象:文件:LINENUMBER:描述:] + 193 4
的UIKit 0x000000010da742f5 - [UITableView的 _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 1756 5的UIKit 0x000000010da7451a - [UITableView的 _createPreparedCellForRowAtIndexPath:willDisplay:] + 81 6的UIKit 0x000000010da82137 - [UITableView的_heightForRowAtIndexPath:] + 208 7
的UIKit 0x000000010dd2b939 - [UISectionRowData heightForRow:切入口:canGuess:] + 259 8的UIKit 0x000000010dd31c1a - [UITableViewRowData heightForRow:切入口:canGuess:adjustForReorderedRow:] + 277 9
的UIKit 0x000000010dd36230 - [UITableViewRowData ensureHeightsFaultedInForScrollToIndexPath:withScrollPosition:boundsHeight:] + 964 10 UIKit的0x000000010da51110 - [UITableView的_contentOffsetForScrollingToRowAtIndexPath:atScrollPosition:usingPresentationValues:] + 2783 11的UIKit 0x000000010da51b8f - [UITableView的_scrollToRowAtIndexPath:atScrollPosition:動畫:usingPresentationValues:] + 146 12的UIKit 0x000000010da51a11 - [UITableView的scrollToRowAtIndexPath:atScrollPosition:動畫:] + 123 13 UIKit 0x000000010de72d11 - [UIWebSelectTableViewController viewWillAppear中:] + 247 14的UIKit 0x000000010dabe9b0 - [UIViewController中 _setViewAppearState:isAnimating:] + 444 15的UIKit 0x000000010dabf245 - [UIViewController中__viewWillAppear:] + 147 16 的UIKit 0x000000010da8b881 __56- [UIPresentationController runTransitionForCurrentState] _block_invoke + 1088 17的UIKit
0x000000010d926c61 _runAfterCACommitDeferredBlocks + 318 18的UIKit
0x000000010d91530d _cleanUpAfterCAFlushAndRunDeferredBlocks + 280 19 的UIKit 0x000000010d945600 _afterCACommitHandler + 137 20的CoreFoundation 0x000000010d442db7 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION
+ 23 21的CoreFoundation 0x000000010d442d0e __CFRunLoopDoObservers + 430 22的CoreFoundation 0x000000010d427324 __CFRunLoopRun + 1572 23的CoreFoundation
0x000000010d426a89 CFRunLoopRunSpecific + 409個24 GraphicsServices
0x00000001124c89c6 GSEventRunModal + 62 25的UIKit
0x000000010d91ad30 UIApplicationMain + 159 26的Web
0x000000010bfb014f主+ 111 27 libdyld。 dylib
0x0000000110df1d81 start + 1 28 ???
0x0000000000000001爲0x0 + 1`

我創建了一行代碼示例應用程序這表明了問題:

https://github.com/AshRobinson/BrokenUIWebView

http://gph.is/2xmHFWs

沒有人有這種問題的解決方法?在此階段遷移到WKWebview不適合我們。

有沒有辦法迫使iPad暫時按iPhone使用UIPickerView作爲下拉菜單?

我已經研究了其他堆棧溢出職位的建議,沒有運氣,例如:

ios 11 Beta 5 select drop-down list issue

+1

具有相同的問題。尚無解決方案。 –

回答

1

我們遇到同樣的錯誤。 Apple's documentation表示任何iOS 8+應用都應該使用WKWebView。一旦我們切換到WKWebView,我們不再看到這個問題。

+1

即使WKWebView升級,我仍然看到相同的問題 – dmorrow

+0

@dmorrow這是我非常簡單的[gist](https://gist.github.com/egrudolph/842df35faa7cc10b054b1b5b6e920f5f) –

0

我遇到了這個問題,用直接添加到UIWindow中的WKWebView。我的問題是,鑑於沒有鏈接到它的的UIViewController,所以下面幾行做的伎倆:

containerVC = [[UIViewController alloc] init]; 
[containerVC.view addSubview:myWkWebview]; 
[window addSubview:containerVC.view]; 

而是直接添加myWkWebview到窗口。有了這個,模態視圖再次被添加:-)