使用HTML select元素时,UIWebView
在iPad上显示原生UIPopoverController
下拉列表(iPhone使用UIPickerView
,效果很好。)
在iOS11上,这似乎完全被打破了:
2017-09-23 09:43:13.190728 + 0100 Web [1779:86622] *终止应用 由于未被捕获的异常' NSInternalInconsistencyException',原因: ' UITableView数据源未设置' * 第一次抛出调用堆栈:(0 CoreFoundation 0x000000010d4a01cb exceptionPreprocess + 171 1 libobjc.A.dylib
0x000000010c8bbf41 objc_exception_throw + 48 2 CoreFoundation
0x000000010d4a5362 + [NSException raise:format:arguments:] + 98 3
基金会0x000000010c360089 - [NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 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:inSection:canGuess:] + 259 8 UIKit 0x000000010dd31c1a - [UITableViewRowData heightForRow:inSection: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:animated:usingPresentationValues:] + 146 12 UIKit 0x000000010da51a11 - [UITableView scrollToRowAtIndexPath:atScrollPosition:animated:] + 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图形服务
0x00000001124c89c6 GSEventRunModal + 62 25 UIKit
0x000000010d91ad30 UIApplicationMain + 159 26 Web
0x000000010bfb014f main + 111 27 libdyld.dylib
0x0000000110df1d81 start + 1 28 ??? 0x0000000000000001 0x0 + 1`
我创建了一个示例应用程序,其中包含一行代码,用于演示此问题:
https://github.com/AshRobinson/BrokenUIWebView
是否有人针对此类问题采取了解决方法?在此阶段,我们无法迁移到WKWebview
。
有没有办法迫使iPad临时使用UIPickerView
下拉菜单?
我已经调查了其他堆栈溢出帖子中没有运气的建议,例如:
答案 0 :(得分:1)
我们遇到了同样的错误。 Apple's documentation表示iOS 8+应用程序应该使用WKWebView。一旦我们切换到WKWebView,我们就不再看到这个问题了。
答案 1 :(得分:0)
我遇到了这个问题,WKWebView被直接添加到UIWindow中。我的问题是视图没有链接到它的UIViewcontroller,所以以下几行做了诀窍:
containerVC = [[UIViewController alloc] init];
[containerVC.view addSubview:myWkWebview];
[window addSubview:containerVC.view];
而不是直接向窗口添加myWkWebview
。有了这个,再次添加了模态视图: - )