UISplitViewController与新的UISearchController问题与UISearchBar
我最近开始重写我的iOS应用程序,使用新的UISearchController
和一个通用的故事板。 我的应用程序适用于这两种设备( iPhone和iPad ),所以使用UISplitViewController
更改为通用故事板是一大优势。
但不幸的是, UISearchController
没有按预期工作。 我用下面几行添加了UISearchController
:
self.searchController = UISearchController(searchResultsController: nil) self.searchController.searchBar.sizeToFit() self.searchController.dimsBackgroundDuringPresentation = false self.myTableView.tableHeaderView = self.searchController.searchBar self.searchController.searchResultsUpdater = self self.definesPresentationContext = true
我的控制器链是这样的:
UISplitViewController UITabbarController (Master) UINavigationController UITableViewController UINavigationController (Detail) UINavigationController UIViewController
问题是在UISearchBar
覆盖的iPad应用程序。 但是,如果我切换选项卡,并返回到视图。 UISearchBar
是可见的。 所以不知何故,在一个tabbar开关后,它正确地重绘视图。 在iPhone版本中,它会自动更正。
iPad应用程序
第一次启动后, UISearchBar
被UINavigationBar
覆盖
切换标签后, UISearchBar
显示正确
iPhone应用程序
iPhone应用程序正常工作,无需更改标签。
我试过的:
- 使用extendsEdges的不同设置
- 在viewWillAppear方法中添加SearchController,因为我以后可以通过添加search控件来欺骗它
我假设你在viewDidload中设置了search控制器self.searchController.searchBar.sizeToFit()
。 除此之外,你需要添加这个方法(Objective-C代码):
- (void)viewDidLayoutSubviews { // you could check // if (IS_IPAD || (IS_IPHONE_6PLUS && UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation))) [self.searchController.searchBar sizeToFit]; }
如果它不起作用,你可以添加这些代码到你的viewDidlLoad
或viewDidLayoutSubviews
:
self.edgesForExtendedLayout = UIRectEdgeNone; self.yourTableViewController.edgesForExtendedLayout = UIRectEdgeNone;
如果你想停靠你的search,请参考我的答案
- 在收到Apple statusUpdateNotification以进行自动续订订阅时,如何确定客户/用户?
- 我的应用程序是不长的支持ipad,当我上传我的应用程序时,它导致Xcode或iTunes Connect错误地拒绝我的更新
- AVAssetWriter可以使用透明度编写文件吗?
- iOS UITableView:使用CAGradientLayer将背景颜色指定为渐变
- 如何在Swift中获得UIScrollView的垂直方向?
- 如何使用AWS Lambda或Google Cloud Functions将Zendesk Mobile SDK与Firebase集成?
- 麻烦从Parse中删除类/列
- 创buildiOS应用程序时,主循环在哪里?
- 缩放UIScrollView contentSize以适应具有可变高度的UITableView的UIView