2017-09-23 29 views
5

Podczas korzystania z elementu HTML select, UIWebView prezentuje natywną UIPopoverController jako listę rozwijaną na iPadzie (iPhone używa UIPickerView, który działa poprawnie).iOS 11 UIWebView menu rozwijane całkowicie zepsute na iPadzie - UIPopoverController

Na iOS11 wydaje się być całkowicie złamana

  • Kliknięcie poza rozwijanych aby odwoływać bez wybierania opcji powoduje w popover zamykane i natychmiast ponownie przedstawiane czasami pusty
  • gdy więcej niż jedną kroplę w dół na stronie rozwijanej dla nowej listy znajdują się elementy z poprzedniej listy
  • Po wybraniu drugiego menu rozwijanego, pierwszy ponownie otwiera się
  • Okazjonalnie rozwijane pojawia się w lewym górnym rogu (prawdopodobnie utracono jego widok źródłowy)
  • Powyższe kroki bardzo sporadycznie powodować następującym wypadku:

2017-09-23 09: 43: 13,190728 + 0100 Web [1779: 86622] * Zakończenie aplikację spowodowane nieprzechwyconego wyjątku „NSInternalInconsistencyException ', powód: ' UITableView dataSource nie jest ustawiony ' * Stos wywołań pierwszego rzutu: (0 CoreFoundation 0x000000010d4a01cb exceptionPreprocess + 171 1 libobjc.A.dylib
0x000000010c8bbf41 objc_exception_throw + 48 2 CoreFoundation
0x000000010d4a5362 + [NSException przebicie: format: argumenty] + 98 3
założenia 0x000000010c360089 - [NSAssertionHandler handleFailureInMethod: obiekt: Plik: LineNumber: Opis:] + 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: animowane: usingPresentationValues:] + 146 12 UIKit 0x000000010da51a11 - [UITableView scrollToRowAtIndexPath: atScrollPosition: animowane:] + 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 przydatny
0x000000010bfb014f główny + 111 27 libdyld. dylib
0x0000000110df1d81 start + 1 28 ???
0x0000000000000001 0x0 + 1 '

stworzyłem przykładową aplikację z jednej linii kodu, który demonstruje problem:

https://github.com/AshRobinson/BrokenUIWebView

http://gph.is/2xmHFWs

Czy ktoś ma obejście takiej emisji ? Migracja do WKWebview nie jest dla nas opcją na tym etapie.

Czy istnieje sposób na wymuszenie na iPadzie korzystania z wersji UIPickerView dla rozwijanych na iPhone'a tymczasowo?

ja badali sugestie na innych stanowiskach przepełnienia stosu bez powodzenia, na przykład:

ios 11 Beta 5 select drop-down list issue

+1

Mając ten sam problem. Nie ma jeszcze rozwiązania. –

Odpowiedz

1

Wpadliśmy do tego samego błędu. Apple's documentation mówi, że każda aplikacja iOS 8+ powinna używać WKWebView. Gdy przełączyliśmy się na WKWebView, nie widzimy już tego problemu.

+1

Nadal widzę ten sam problem nawet przy aktualizacji WKWebView – dmorrow

+0

@dmorrow Oto mój bardzo prosty [gist] (https://gist.github.com/egrudolph/842df35faa7cc10b054b1b5b6e920f5f) –

0

Wpadłem na ten problem z WKWebView, który był dodawany bezpośrednio do UIWindow. Moim problemem było to, że widok nie mają UIViewController umieszczonego na nim, więc następujące linie wystarczyły:

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

Zamiast dodawania myWkWebview bezpośrednio do okna. W ten sposób ponownie dodano widoki modalne :-)