【问题标题】:transparent UIStatusBar with UISearchController带有 UISearchController 的透明 UIStatusBar
【发布时间】:2015-02-11 07:58:40
【问题描述】:

我正在使用以下代码来显示 UISearchBar

    searchController = UISearchController(searchResultsController: resultsTableViewController)
    searchController?.searchResultsUpdater = self
    searchController?.searchBar.sizeToFit()
    searchController?.searchBar.backgroundColor = UIColor.whiteColor()
    searchController?.searchBar.searchBarStyle = UISearchBarStyle.Minimal
    self.tableView?.tableHeaderView = searchController?.searchBar
    searchController?.delegate = self
    searchController?.dimsBackgroundDuringPresentation = false
    searchController?.searchBar.delegate = self

    definesPresentationContext = true

我的问题是当我进入搜索模式时,视图进入全屏状态,我可以看到 tableview 的内容与 UISearchBar 重叠,这是一个错误,任何解决此问题的方法吗?

看截图

我的解决方案

   func willPresentSearchController(searchController: UISearchController) {
    topBarView = UIView(frame: CGRectMake(0.0, 0.0, self.view.frame.size.width, 20.0))
    topBarView?.backgroundColor = UIColor.whiteColor()
    AppDelegate.sharedAppDelegate().window?.rootViewController?.view.addSubview(topBarView!)
}

func willDismissSearchController(searchController: UISearchController) {
    topBarView?.removeFromSuperview()
}

【问题讨论】:

  • 试试self.automaticallyAdjustsScrollViewInsets = YES;
  • 这个不行
  • “红名单”是章节标题?
  • 上面没有我的简单解决方案
  • 您以一种粗略的方式操作子视图。你想达到什么目标?

标签: uisearchbar uistatusbar uisearchcontroller


【解决方案1】:

也许您可以在搜索过程中隐藏状态栏。自定义子类应该可以工作:

class MySearchController: UISearchController {
    override func prefersStatusBarHidden() -> Bool {
        return true
    }
}

【讨论】:

    【解决方案2】:

    您无需使用搜索控制器方法进行破解。相反,您可以编辑搜索栏属性:

    self.iSearchController.searchBar.searchBarStyle = UISearchBarStyleDefault;
    self.iSearchController.searchBar.backgroundImage = [UIImage imageWithImage: [UIImage imageNamed:@"whiteBackgroundImage.png"] withTintColor:[UIColor colorWithRed:246/255.0f green:246/255.0f blue:246/255.0f alpha:1.0f]]; // or you can just create any random plain image with this color and use it with imageNamed: method.
        self.iSearchController.searchBar.barTintColor = [UIColor colorWithRed:246/255.0f green:246/255.0f blue:246/255.0f alpha:1.0f];
    

    为方便起见,imageWithImage:withTintColorMethod 定义如下:

    @implementation UIImage(类别)

    + (UIImage *) imageWithImage: (UIImage*) image withTintColor: (UIColor*) color {
        UIImage *newImage = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
        UIGraphicsBeginImageContextWithOptions(newImage.size, NO, newImage.scale);
        [color set];
        [newImage drawInRect:CGRectMake(0, 0, newImage.size.width, newImage.size.height)];
        newImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return newImage;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 2015-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多