iOS 11在iPad上完全破碎的UIWebView下拉菜单 - UIPopoverController

iOS 11在iPad上完全破碎的UIWebView下拉菜单 - UIPopoverController

问题描述:

当使用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

具有相同的问题。尚无解决方案。 –

我们遇到同样的错误。 Apple's documentation表示任何iOS 8+应用都应该使用WKWebView。一旦我们切换到WKWebView,我们不再看到这个问题。

+1

即使WKWebView升级,我仍然看到相同的问题 – dmorrow

+0

@dmorrow这是我非常简单的[gist](https://gist.github.com/egrudolph/842df35faa7cc10b054b1b5b6e920f5f) –

我遇到了这个问题,用直接添加到UIWindow中的WKWebView。我的问题是,鉴于没有链接到它的的UIViewController,所以下面几行做的伎俩:

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

而是直接添加myWkWebview到窗口。有了这个,模态视图再次被添加:-)