首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有大标题的UISearchController在选项卡栏中崩溃,并显示“只有一个带有上边界的调色板可以在过渡之外处于活动状态”

带有大标题的UISearchController在选项卡栏中崩溃,并显示“只有一个带有上边界的调色板可以在过渡之外处于活动状态”
EN

Stack Overflow用户
提问于 2018-07-18 00:51:39
回答 3查看 636关注 0票数 4

我在一个UITabBarController中有多个选项卡。它们都有一个带有大标题的UINavigationBar和一个iOS-11内置的搜索栏。但是,在选项卡之间切换会导致应用程序崩溃

代码语言:javascript
复制
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:
'Only one palette with a top boundary edge can be active outside of a transition. Current active palette is 
<_UINavigationControllerManagedSearchPalette: 0x7fc399b49980; frame = (0 96; 375 52); layer = <CALayer: 0x60c0004383a0>>'

我已经测试了这里发布的解决方法:https://stackoverflow.com/a/46382723/511299,但没有成功。这个问题没有使用UITabBarController。

我已经将这段代码添加到viewDidAppear

代码语言:javascript
复制
DispatchQueue.main.async {
    let searchController = UISearchController(searchResultsController: nil)
    searchController.searchResultsUpdater = self
    self.navigationItem.searchController = searchController
}

这是给viewWillDisappear

代码语言:javascript
复制
self.navigationItem.searchController = nil

将打印添加到每个方法以检查顺序,在将其设置在出现的视图上之前,会验证前一个视图是否为nils。

它在从标签0到标签1,然后回到标签0之后崩溃。我甚至不需要向下滚动就可以显示搜索栏。

完整堆栈跟踪:

代码语言:javascript
复制
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Only one palette with a top boundary edge can be active outside of a transition. Current active palette is <_UINavigationControllerManagedSearchPalette: 0x7fea7dcaf880; frame = (0 44; 375 52); layer = <CALayer: 0x60000062ac20>>'
*** First throw call stack:
(
0   CoreFoundation                      0x000000010b8381e6 __exceptionPreprocess + 294
1   libobjc.A.dylib                     0x0000000109cda031 objc_exception_throw + 48
2   CoreFoundation                      0x000000010b8ad975 +[NSException raise:format:] + 197
3   UIKit                               0x000000010e67dec6 -[UINavigationController(_UIPalette) attachPalette:isPinned:] + 521
4   UIKit                               0x000000010e659afd -[UINavigationController _createAndAttachSearchPaletteForTopViewControllerIfNecessary:] + 585
5   UIKit                               0x000000010e677c10 -[UINavigationController _navigationItemDidUpdateSearchController:oldSearchController:] + 419
6   UIKit                               0x000000010f0737a1 -[_UINavigationBarVisualProviderModernIOS navigationItemUpdatedSearchController:oldSearchController:animated:] + 160
7   UIKit                               0x000000010edf15c4 -[UINavigationItem setSearchController:] + 135
8   Appmost                             0x0000000107e5902e _T07Appmost25JsonCreatedViewControllerC14setupSearchBaryyFyycfU_ + 1486
9   Appmost                             0x0000000107e590cd _T07Appmost25JsonCreatedViewControllerC14setupSearchBaryyFyycfU_TA + 13
10  Appmost                             0x0000000107cbcb7d _T0Ieg_IeyB_TR + 45
11  libdispatch.dylib                   0x00000001124c97ab _dispatch_call_block_and_release + 12
12  libdispatch.dylib                   0x00000001124ca7ec _dispatch_client_callout + 8
13  libdispatch.dylib                   0x00000001124d58cf _dispatch_main_queue_callback_4CF + 628
14  CoreFoundation                      0x000000010b7fac99 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9
15  CoreFoundation                      0x000000010b7beea6 __CFRunLoopRun + 2342
16  CoreFoundation                      0x000000010b7be30b CFRunLoopRunSpecific + 635
17  GraphicsServices                    0x0000000113adaa73 GSEventRunModal + 62
18  UIKit                               0x000000010e482057 UIApplicationMain + 159
19  Appmost                             0x0000000107f72167 main + 55
20  libdyld.dylib                       0x0000000112547955 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSExceptio
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-20 22:12:42

我试图重现这个问题,但当我在func viewDidLoad()中添加代码时,一切似乎都很正常

以下是在iOS11中添加搜索视图控制器的代码

代码语言:javascript
复制
    if #available(iOS 11.0, *) {
        //Setup Search Controller
        self.searchController.obscuresBackgroundDuringPresentation = false
        self.searchController.searchBar.placeholder = "Search"
        self.searchController.searchBar.barStyle = .black
        self.searchController.searchBar.delegate = self
        self.definesPresentationContext = true
        self.navigationItem.searchController = searchController
        self.navigationItem.title = "Heading 2"
    }

我还为您创建了一个演示项目,请在Github Here中找到它

票数 2
EN

Stack Overflow用户

发布于 2018-07-18 01:44:37

我已经在viewDidLoad()中添加了这段代码,它正在工作

尝试添加以下代码行:

代码语言:javascript
复制
searchController.dimsBackgroundDuringPresentation
票数 0
EN

Stack Overflow用户

发布于 2019-02-23 19:25:41

这些行解决了我的问题。

代码语言:javascript
复制
let search = UISearchController(searchResultsController: nil)
    search.obscuresBackgroundDuringPresentation = false
    self.definesPresentationContext = true
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51386641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档